我试图在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,非常感谢这么简单的解决方案(或者最好是那些有大量解释性意见的解决方案)。
答案 0 :(得分:0)
使用
ax.plot(X, np.array(Y), Z, color=cs[step])
或
Y = [y[step]] * 24
这看起来像mpl中的一个错误,我们不会在您交付数据时复制数据,因此每行共享相同的np.array
对象,因此当您更新所有行时