插值后将要素叠加添加到matplotlib图时出错

ktecyv1j  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(92)

我必须承认,我仍然有问题理解正确的设置和关系的情节和它的部分与matplotlib,仍然是混淆如何fig与plt与ax相互关联,所以我只是尝试和错误,文档有时更令我困惑。:—(
我正在绘制天气值,从一个json和点。我可以用下面的代码绘制,如下图所示

fig=plt.figure(figsize=(10,8))
ax=fig.add_subplot(1,1,1,projection=mapcrs)
ax.set_extent([-93,-86,13,19],datacrs)
ax.add_feature(cfeature.COASTLINE)
ax.add_feature(cfeature.BORDERS, linestyle=':')
ax.scatter(lon,lat,c=dat,transform=datacrs)

我就能画出

然后我用下面的代码使用metpy生成插值

gridx, gridy, gridz = interpolate_to_grid(lon, lat, dat, interp_type='rbf', hres=.1, rbf_func='linear', rbf_smooth=0)

fig=plt.figure(figsize=(15,15))
ax=fig.add_subplot(1,1,1,projection=mapcrs)
#ax = fig.add_axes([0, 0, 1, 1], projection=mapcrs)
#ax.set_extent([-93,-86,13,19])
#ax.add_feature(cfeature.COASTLINE)
#ax.add_feature(cfeature.BORDERS, linestyle=':')
ax.contourf(gridx,gridy,gridz,levels=np.arange(10,60,2),cmap='viridis')
plt.plot(lon,lat,'k.',color='white')

我得到了所需的插值点,但不能显示的特点,是如何做到这一点?如果我取消对ax.extent的注解,我所看到的只是一个空的白色图形。如果我取消注解轴。功能插值显示为下图,但不是Map。
感谢您的帮助和指导。

1mrurvl1

1mrurvl11#

您在contourf函数中缺少transform关键字参数,以便给予插值数据的坐标系。下面是一个随机数据的最小工作示例,获得的输出如下:

import numpy as np

from cartopy import crs, feature
from matplotlib import pyplot as plt
from scipy.interpolate import griddata

# figure
fig = plt.figure(figsize=(5, 5))

# coordinate systems
crs_map = crs.Mercator()
crs_data = crs.PlateCarree()

# random data
np.random.seed(42)  # for repro.
n = 100
lon = -89 + 2 * np.random.randn(n)
lat = 16 + 2 * np.random.randn(n)
dat = np.random.rand(n)

# interpolated data
ilon = np.linspace(-93, -86, 200)
ilat = np.linspace(13, 19, 200)
ilon, ilat = np.meshgrid(ilon, ilat)
idat = griddata((lon, lat), dat, (ilon, ilat), method="linear")

# show up
ax = fig.add_subplot(1, 1, 1, projection=crs_map)
ax.set_extent([-93, -86, 13, 19], crs_data)
ax.add_feature(feature.COASTLINE)
ax.add_feature(feature.BORDERS, ls=":", lw=0.5)
ax.scatter(lon, lat, c=dat, transform=crs_data)  # this is invisible with contour
ax.plot(lon, lat, "k.", transform=crs_data)  # in order to see the points
ax.contourf(ilon, ilat, idat, levels=np.linspace(0, 1, 10), transform=crs_data)

相关问题