2016-04-28 60 views
1

我想繪製3D圖中的多條線。每行代表一個月:我希望它們在y方向上平行顯示。Matplotlib:多個3D線都使用我的循環中的最終y值繪製

我的計劃是循環使用一組Y值,但是我無法使其正常工作,因爲使用ax.plot命令(請參見下面的工作代碼)會在最終Y的位置產生一打行。令人困惑的是,交換ax.plot for ax.scatter does會產生一組平行的數據(雖然以一組點的形式; ax.view_init設置爲最好地顯示結果的並行方面)。

如何使用多條平行線生成一個繪圖? 我目前的解決方法是用十幾個不同數組的Y值代替循環,而不能是正確的答案。

from mpl_toolkits.mplot3d.axes3d import Axes3D 
import matplotlib.pyplot as plt 
import numpy as np 

# preamble 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
cs = ['r','g','b','y','r','g','b','y','r','g','b','y'] 

# x axis 
X = np.arange(24) 

# y axis 
y = np.array([15,45,75,105,135,165,195,225,255,285,315,345]) 
Y = np.zeros(24) 

# data - plotted against z axis 
Z = np.random.rand(24) 

# populate figure 
for step in range(0,12): 
    Y[:] = y[step] 
# ax.plot(X,Y,Z, color=cs[step]) 
    ax.scatter(X,Y,Z, color=cs[step]) 

ax.set_xlabel('X') 
ax.set_ylabel('Y') 
ax.set_zlabel('Z') 
# set initial view of plot 
ax.view_init(elev=80., azim=345.) 
plt.show() 

我還在學習python,所以我非常感謝這麼簡單的解決方案(或者最好有很多解釋性註釋的解決方案)。

回答

0

使用

ax.plot(X, np.array(Y), Z, color=cs[step]) 

Y = [y[step]] * 24 

這看起來像在MPL,我們不復制數據時,你把它在使每一行共享相同的np.array對象,所以當你的錯誤更新它全部你的線路。

+0

哇 - 一個非常簡單的解決方案(實際上是兩個!) - 非常感謝你,這是完美的。 – RChapman