错误:不支持二维布尔索引。当我想画风场时它就会出现。我使用cartopy的ax.quiver()函数。
这是代码:
dpath=r'E:\Data\Wind\era5wind2019.nc'
d=xr.open_dataset(dpath)
uw=d['u']
vw=d['v']
u=uw.loc['2019-01-01',:,:]
v=vw.loc['2019-01-01',:,:]
lat=uw.latitude
lon=uw.longitude
fig=plt.figure()
ax=fig.add_subplot(111,projection=ccrs.PlateCarree(180))
proj=ccrs.PlateCarree()
Q = ax.quiver(
lon, lat, u, v, transform=proj,
regrid_shape=20, angles='uv',
scale=12, scale_units='xy',
units='width', width=0.002
)
我在使用 ERA5 数据时遇到了类似的问题,并发现如果将 ax.quiver 调用中的 u 和 v 替换为 u.values 和 v.values,错误就会消失。
当我用自己的 ERA5 风文件尝试时,我收到以下警告,如果同时为投影和变换提供 ccrs.PlateCarree(),该警告就会消失。
~/.conda/envs/work/lib/python3.8/site-packages/cartopy/vector_transform.py:140: UserWarning: Some vectors at source domain corners may not have been transformed correctly
# u, v = target_proj.transform_vectors(src_crs, x, y, u, v)
我怀疑部分或全部相关数据:
lon
、lat
、u
、v
不是单一维度且长度不同。
您可以使用
.ravel()
将它们转换为在 .quiver()
中使用:
Q = ax.quiver(lon.ravel(), lat.ravel(), u.ravel(), v.ravel(), ... )
如果结果具有相同的长度,这应该有效。
我的数据也遇到类似问题,发现这是由于变量中存在填充值造成的。
在使用之前我必须用屏蔽值替换它们
ax.quiver
:
u_msk = numpy.ma.masked_where(u > 1e30, u)
v_msk = numpy.ma.masked_where(v > 1e30, v)
我也遇到了这个问题,我使用“ax=fig.add_subplot(1,1,1,projection=ccrs.PlateCarree())” 取代 “ax = Fig.add_axes([0.1, 0.1, 0.8, 0.4],投影 = ccrs.PlateCarree())”。 然后就可以了。