我正在尝试在 3D 图形中绘制多条线。每行代表一个月:我希望它们在 y 方向上平行显示。
我的计划是遍历一组 Y 值,但我无法使其正常工作,因为使用 ax.plot 命令(请参阅下面的工作代码)会在最终 Y 值的位置生成十几行。令人困惑的是,将 ax.plot 换成 ax.scatter 确实会产生一组平行的数据线(尽管是以一组点的形式;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,因此非常感谢简单的解决方案(或者最好是那些带有大量解释性注释的解决方案)。
使用
ax.plot(X, np.array(Y), Z, color=cs[step])
或
Y = [y[step]] * 24
这看起来像 mpl 中的一个错误,当您提交数据时我们不会复制数据,因此每行共享相同的np.array
对象,因此当您更新所有行时。