“二维布尔索引”,使用cartopy时ax.quiver()函数的错误

问题描述

错误不支持二维布尔索引。当我想绘制风场时出现。我使用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)
,

我怀疑部分或全部相关数据:lonlatuv 不是单一维度且长度相同。>

您可以使用 .ravel() 将它们转换为在 .quiver() 中使用:

Q = ax.quiver(lon.ravel(),lat.ravel(),u.ravel(),v.ravel(),... )

如果结果长度相同,这应该有效。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...