2012-01-08 85 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