2016-06-29 88 views
0

爲什麼這個matplotlib代碼給了我一個奇怪的異常?我要去兩排地塊。最上面一行應該顯示true和pred,最下面一行應該顯示百分比錯誤。AttributeError:'numpy.ndarray'對象沒有屬性'plot'

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

可不可以給什麼'X'多一點信息,'y'和'func'是誰?我無法重現您顯示的錯誤。 只是一個想法,如果你正在運行的代碼有一個拼寫錯誤,而不是'斧頭,_x在zip(X,軸)'',這將重現錯誤(併成爲一個錯字,我完全可以看到我自己正在製作。) –

回答

4

如果len(X)> 1,axesAxesSubplot實例的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()