为什么这个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'
答案 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()