首页 > 解决方案 > Stationplot barbs 因 AttributeError 而失败:“list”对象没有属性“shape”

问题描述

当尝试使用 stationplot.plot_barb 在站模型图中绘制风倒钩时,我得到了这个 AttributeError。我认为发生这种情况是因为该函数不希望将 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'

标签: metpy

解决方案


所以这实际上在您的纬度/经度变量上失败了,我在您的代码块中没有看到,但我假设是列表(或者至少这是我们之前在这个问题出现时看到的)。我们对此有一个修复程序,将在 MetPy 0.11 中发布,但与此同时,您只需使用 np.array() 将您的纬度/经度列表转换为 Numpy 数组。


推荐阅读