当尝试使用stationplot.plot_barb在车站模型图中绘制风倒钩时,我得到这个属性错误。我认为发生这种情况是因为该函数不希望 u 和 v 作为列表,所以我在通过 wind_components 函数之前将它们转换为 numpy 数组。但是,即使我的 u 和 v 是数组而不是列表,我仍然会收到错误。
我已经用 metpy 的示例代码测试了风倒钩,它可以工作。我什至确保我的 u 数组的类型与 metpy 的示例代码返回的类型相同。
######## Code that is questionable #########
u, v = wind_components(np.array(data['wind'])*units('knots'), np.array(data['dir'])*units.degree)
print(data['wind'], data['dir'])
print(u,v)
print(type(u))
stationplot.plot_barb(u, v)
############################################
[4.0, 0.0] [250.0, 0.0]
[ 3.75877048 -0. ] knot [ 1.36808057 -0. ] knot
<class 'pint.quantity.build_quantity_class.<locals>.Quantity'>
完整回溯:
AttributeError Traceback (most recent call last)
<ipython-input-8-b809815aacc3> in <module>()
22 print(u,v)
23 print(type(u))
---> 24 stationplot.plot_barb(u, v)
25 ############################################
26
~/.conda/envs/mybase/lib/python3.6/site-packages/metpy/plots/station_plot.py in plot_barb(self, u, v, **kwargs)
297 except AttributeError:
298 pass
--> 299 u, v = self.ax.projection.transform_vectors(trans, self.x, self.y, u, v)
300
301 # Since we've re-implemented CartoPy's barbs, we need to skip calling it here
lib/cartopy/_crs.pyx in cartopy._crs.CRS.transform_vectors()
AttributeError: 'list' object has no attribute 'shape'
所以这实际上在你的 lat/lon 变量上失败了,我在你的代码块中没有看到,但我假设是列表(或者至少这是我们之前看到的这个问题出现时)。我们有一个修复程序,将在 MetPy 0.11 中发布,但与此同时,您只需要使用 np.array() 包装它们,将 lat/lon 列表转换为 Numpy 数组。