Matplotlib:使用我循环中的最终y值绘制多条3D线

时间:2016-04-28 15:52:32

标签: python matplotlib mplot3d

我试图在3D图中绘制多条线。每行代表一个月:我希望它们在y方向上平行显示。

我的计划是循环一组Y值,但我不能正常工作,因为使用ax.plot命令(参见下面的工作代码)会在最终位置生成十几行 Y值。令人困惑的是,为ax.scatter 交换ax.plot 会产生一组平行的数据线(虽然是一组点的形式; 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,非常感谢这么简单的解决方案(或者最好是那些有大量解释性意见的解决方案)。

1 个答案:

答案 0 :(得分:0)

使用

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

Y = [y[step]] * 24

这看起来像mpl中的一个错误,我们不会在您交付数据时复制数据,因此每行共享相同的np.array对象,因此当您更新所有行时