2012-01-08 80 views
2

我有一個問題,試圖在MatPlotLib中的三維繪圖中繪製一系列線條。 當我運行下面的代碼時,所有的行都繪製在y的最後一個值上?即使y在循環中正確遞增。 任何幫助瞭解這一點,將不勝感激。 感謝 大衛Matplotlib三維繪圖不能正確繪製

#========== Code Start================= 
import numpy as np 
import matplotlib 
from matplotlib.figure import Figure 
import pylab as plt 
from mpl_toolkits.mplot3d import Axes3D 


fig = plt.figure() 
ax = Axes3D(fig) 
x=np.arange(5) 
y=np.zeros(len(x)) 

for i in range(1,10): 
    y.fill(i) 
    z=plt.randn(len(y)) 
    ax.plot(xs=x, ys=y, zs=z)#, zdir='z', label='ys=0, zdir=z') 
    plt.draw() 
    print i,len(y),y,x,z 
plt.xlabel('X') 
plt.ylabel('Y') 
plt.zlabel('Z') 
plt.show() 
#========== Code End================= 

回答

1

它看起來像Ÿ可能會被所有的地塊被指向。所以當你執行ax.plot時,你將傳遞給y的引用。每次都是相同的參考,但是每次通過時都會更改這些值。當plt.show()被執行的參考y被使用,並且現在設定爲9。所以,在每個建立一個不同的對象y的傳遞與要用於該道次的值:

y = np.zeros(len(x)) 
y.file(i) 

可能會出現一個可以一次性填充所需值的粗糙命令,但您可以獲得圖片。

+0

謝謝Demolishan,你是對的。將y = np.zeros(len(x))放入循環中,確保爲最終圖確保正確的y索引。我沒有意識到你在劇情中也有這種堅持。 – user1032355 2012-01-08 13:58:36