我的目标是仅在超过感兴趣区域中观察到的最大风速的 2/3 时绘制风倒钩(这是标准米勒复合图的一部分)。
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, None, 10))
skip_850 = (slice(None, None, 8), slice(None, None, 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, length=6,
transform=ccrs.PlateCarree(),
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, wind_slice].to('knots'), length=6, color = '#ff0000')
我在整个领域都遇到了风倒钩。所以我怀疑是否缺少数据。
此外,当我打印 mask_500 时,我得到一个 False。这应该是一组 True 或 False 布尔值,具体取决于风速是高还是低(至少我认为)。
所以我的问题是:我怎样才能实现这个面具只在给定的压力水平下绘制明显的强风?为什么 mpcalc.wind_speed 方法会从完整的 u 和 v 组件数据数组中返回一堆 nan 值?
作为参考,我使用的是通过虹吸管从 UCAR TDS 获得的 HRRR 数据。