问题描述
错误:不支持二维布尔索引。当我想绘制风场时出现。我使用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(),... )
如果结果长度相同,这应该有效。