AttributeError:' numpy.ndarray'对象没有属性' plot'

时间:2016-06-29 23:32:41

标签: python matplotlib

为什么这个matplotlib代码给了我一个奇怪的例外?我要去两排地块。最上面一行应该显示真实与预测,而底行应该显示百分比误差。

yy = func(*X)

fig, axes = plt.subplots(1, len(X))
for ax,_x in zip(axes,X):
    ax.plot(_x, y, 'b.')
    ax.plot(_x, yy, 'r.')

fig, axes = plt.subplots(2, len(X))
for ax,_x in zip(axes,X):
    ax.plot(_x, yy/y-1, 'r.')

plt.show()

回溯:

   File "pysr.py", line 235, in main
     ax.plot(_x, yy/y-1, 'r.')
AttributeError: 'numpy.ndarray' object has no attribute 'plot'

1 个答案:

答案 0 :(得分:5)

如果len(X)> 1,axes将是AxesSubplot个实例的2D数组。因此,当您遍历axes时,您实际上会在axes数组的一个维度上获得切片。

要解决此问题,您可以使用axes.flat

for ax,_x in zip(axes.flat,X):

此外,如果你试图在一个图上绘制所有这些,你不需要两次调用plt.subplots,因为这将创建两个数字。

axes数组编入索引可能更容易:

yy = func(*X)

fig, axes = plt.subplots(2, len(X))

for i,_x in enumerate(X):
    axes[0, i].plot(_x, y, 'b.')
    axes[0, i].plot(_x, yy, 'r.')

    axes[1, i].plot(_x, yy/y-1, 'r.')

plt.show()