【发布时间】:2016-01-14 01:35:39
【问题描述】:
我正在使用 matplotlib 准备 3d 图,并且我对多个数据集的行为非常奇怪。我有两个数据集,它们基本上描述了 3d 中的两个壳:一个内壳和一个外壳。要在 3d 中绘制它们,我会这样做:
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(outer_z[:n], outer_x[:n], outer_y[:n], c='black', marker='.', lw=0)
ax.scatter(inner_z[:n], inner_x[:n], inner_y[:n], c='red', marker='.', lw=0)
ax.set_xlabel("Z")
ax.set_ylabel("X")
ax.set_zlabel("Y")
ax.set_xlim([-5,5])
ax.set_ylim([5,-5])
ax.set_zlim([-5,5])
(轴的顺序仅用于透视目的)。但是,当我保存图形时,我没有得到两个外壳:
我将一层放在另一层之上,明显在后面的点出现在前面。您可以在图片上看到,应该在内壳后面的外壳的一些点被绘制在内壳的前面。这真的很烦人,因为它不追求“3d 情节”的目的。有没有人知道为什么会发生这种情况以及如何解决? 非常感谢!
【问题讨论】:
-
我在想,如果您决定手动进行操作,我有一个如何操作的想法。您必须选择一个点作为您的视角(相机所在的位置)和相机指向的方向。然后从这里有一个公式可以确定该点在该方向上的距离(使用点到平面的距离公式),您可以将其用于您的 zorder 参数。如果您对此感到好奇,请告诉我,我们可以试一试。但说实话,您可能想为这个项目寻找其他工具(带有真正的 3d 引擎)。
标签: python matplotlib 3d scatter