2012-01-08 5 views
2

MatPlotLib의 3D 플롯에 일련의 선을 그릴 때 문제가 있습니다. 아래 코드를 실행하면 모든 줄이 y의 마지막 값에 표시됩니까 ??? 루프에서 y가 올바르게 증가하더라도. 이 점을 이해하는 데 도움을 주시면 감사하겠습니다. y는 모든 플롯에 의해 지시 될 수처럼 감사 다윗은Matplotlib 3D 플롯이 올바르게 플롯되지 않았습니다.

#========== 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에 대한 참조를 전달합니다. 매번 동일한 참조이지만 값은 각 패스에서 변경됩니다.

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

다음 plt.show()가 사용되는 Y에 대한 참조를 실행하고 그것이 지금 9로 설정하는 경우 그래서, 당신은 그 패스에 대해 원하는 값으로 전달할 각 Y에 대해 서로 다른 객체를 생성 한 번에 원하는 값으로 채워지는 numpy 명령이있을 수 있지만 그림이 표시됩니다.

+0

감사합니다. Demolishan, 정확합니다. 루프 내에 y = np.zeros (len (x))를 넣으면 최종 플롯의 올바른 y 인덱스가 유지됩니다. 나는 그 음모에 그 끈기가 있음을 깨닫지 못했습니다. – user1032355

관련 문제