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

问题描述 投票:0回答:4

错误:不支持二维布尔索引。当我想画风场时它就会出现。我使用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
    )
python cartopy
4个回答
1
投票

我在使用 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)

1
投票

我怀疑部分或全部相关数据:

lon
lat
u
v
不是单一维度且长度不同。

您可以使用

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

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

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


0
投票

我的数据也遇到类似问题,发现这是由于变量中存在填充值造成的。

在使用之前我必须用屏蔽值替换它们

ax.quiver
:

u_msk = numpy.ma.masked_where(u > 1e30, u)
v_msk = numpy.ma.masked_where(v > 1e30, v)

0
投票

我也遇到了这个问题,我使用“ax=fig.add_subplot(1,1,1,projection=ccrs.PlateCarree())” 取代 “ax = Fig.add_axes([0.1, 0.1, 0.8, 0.4],投影 = ccrs.PlateCarree())”。 然后就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.