使用cartopy+quiver调整全球辐散风矢量密度的报错解决
报错原因
切片逻辑错误导致数组形状不匹配:
- 读取的
lon、lat是一维数组,分别对应经度、纬度格点坐标 - NCEP再分析的风场
u、v是二维数组,维度顺序为[纬度, 经度] - 之前对四个数组统一使用
[::3]的一维切片,仅对二维风场的纬度方向做了采样,经度方向仍保留原始格点数量,经cartopy自动生成经纬度网格后,x/y坐标数组和风场u/v数组形状完全不一致,触发ValueError。
修复方法
对二维风场的纬度、经度两个维度同时按步长采样,一维经纬度数组单独做对应维度的步长切片即可,参考代码如下:
# 定义采样步长,数值越大矢量越稀疏,可根据显示效果调整 step = 3 # 分别对经纬度一维数组采样 lon_sampled = lon.to_numpy()[::step] lat_sampled = lat.to_numpy()[::step] # 对u、v二维数组的两个维度同时采样,顺序对应[纬度方向, 经度方向] u_sampled = u_850.to_numpy()[::step, ::step] v_sampled = v_850.to_numpy()[::step, ::step] ax = plt.axes(projection=ccrs.PlateCarree(central_longitude=180)) q = ax.quiver(lon_sampled, lat_sampled, u_sampled, v_sampled, width=0.00095, scale_units='xy', scale=3, transform=ccrs.PlateCarree())
调试提示
如果运行后出现风矢量位置和海岸线错位,先打印四个数组的形状验证,满足以下要求即可正常运行:
lon_sampled.shape为一维结构,长度为采样后的经度格点数lat_sampled.shape为一维结构,长度为采样后的纬度格点数u_sampled.shape、v_sampled.shape为二维结构,形状为(采样后纬度格点数, 采样后经度格点数)
内容的提问来源于stack exchange,提问作者Tanu Sharma
相关产品推荐
相关产品推荐

