2016-04-28 58 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