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

Matplotlib: multiple 3D lines all get drawn using the final y-value in my loop

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

我的计划是遍历一组 Y 值,但我无法使其正常工作,因为使用 ax.plot 命令(请参阅下面的工作代码)会产生十几行 all在最终Y值的位置。令人困惑的是,将 ax.plot 换成 ax.scatter 确实会 产生一组平行的数据线(尽管是一组点的形式;ax.view_init 组以最好地显示结果的平行方面)。

如何使用 a 生成具有多条平行线的图? 我目前的解决方法是用十几个不同的 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,非常感谢简单的解决方案(或者,最好是那些带有大量解释性注释的解决方案)。

使用

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

Y = [y[step]] * 24

这看起来像是 mpl 中的一个错误,当您提交数据时我们不会复制数据,因此每一行都共享相同的 np.array 对象,因此当您更新它时 all 你的台词。