我的目标是仅绘制风钩,使其超过感兴趣区域中观察到的最大风速的2/3(这是标准Miller Composite地图的一部分)。
MetPy示例中针对米勒图执行此操作的代码
wspd_500 = mpcalc.wind_speed(u_500,v_500)
wspd_850 = mpcalc.wind_speed(u_850,v_850)
mask_500 = ma.masked_less_equal(wspd_500,0.66 * np.max(wspd_500)).mask
u_500[mask_500] = np.nan
v_500[mask_500] = np.nan
# 850 hPa
mask_850 = ma.masked_less_equal(wspd_850,0.66 * np.max(wspd_850)).mask
u_850[mask_850] = np.nan
v_850[mask_850] = np.nan
skip_500 = (slice(None,None,10),slice(None,10))
skip_850 = (slice(None,8),8))
# 500-hPa wind barbs
jet500 = ax.barbs(lon[skip_500],lat[skip_500],u_500[skip_500].m,v_500[skip_500].m,length=6,transform=ccrs.PlateCarree(),color='blue',zorder=9,label='500-hPa Jet Core Winds (kt)')
# 850-hPa wind barbs
jet850 = ax.barbs(lon[skip_850],lat[skip_850],u_850[skip_850].m,v_850[skip_850].m,color='k',zorder=8,label='850-hPa Jet Core Winds (kt)')
返回错误
TypeError: len() of unsized object
追溯到该行
u_500[mask_500] = np.nan
要进行故障排除,我打印了wspd_500:
[[0.3819355070590973 0.41758668422698975 0.41758668422698975 ... nan nan nan] [0.3577602505683899 0.4053502082824707 0.4053502082824707 ... nan nan nan] [0.3433985114097595 0.4025561213493347 0.4025561213493347 ... nan nan nan] ... [nan nan nan ... nan nan nan] [nan nan nan ... nan nan nan] [nan nan nan ... nan nan nan]] meter / second
这很奇怪,因为我不确定为什么所有这些nan值都会不断弹出。 u_500和v_500似乎包含所有相关值。当我使用其他方法绘图时:
ax.barbs(x[wind_slice],y[wind_slice],u_850.metpy.unit_array[wind_slice,wind_slice].to('knots'),v_850.metpy.unit_array[wind_slice,color = '#ff0000')
我在整个域中都有风刺。因此,我对缺少数据表示怀疑。
此外,当我打印mask_500时,我得到一个False。根据风速是高还是低,这应该是一个True或False布尔数组(至少我认为)。
所以我的问题是:在给定的压力水平下,我该如何实现此面罩以仅绘制明显的强风?为什么mpcalc.wind_speed方法从完整的u和v组件数据数组返回一堆nan值?
为便于参考,我正在使用通过虹吸管从UCAR TDS获得的HRRR数据。