J. *_*ira 5 python matplotlib scatter3d matplotlib-3d
我正在使用 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])
Run Code Online (Sandbox Code Playgroud)
(轴的顺序仅用于透视目的)。然而,当我保存该图时,我没有得到两个外壳:
我将一层覆盖在另一层上,后面清晰可见的点出现在前面。您可以在图片中看到,外壳上本应位于内壳后面的一些点绘制在内壳前面。这确实很烦人,因为它不追求“3D情节”的目的。有谁知道为什么会发生这种情况以及如何解决这个问题?
非常感谢您的解释:)我认为确实可能是这样的。但我忘了在我的问题中说,无论 ax.scatter 命令的顺序如何,都会发生同样的事情,这很奇怪。我在阅读您的答案之前发现 ax.plot 命令不会发生这种情况。因此,我更换了:
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)
Run Code Online (Sandbox Code Playgroud)
经过
ax.plot(outer_z[:n], outer_x[:n], outer_y[:n], '.', markersize=1, color='black')
ax.plot(inner_z[:n], inner_x[:n], inner_y[:n], '.', markersize=1, color='red')
Run Code Online (Sandbox Code Playgroud)
我得到了下面的图片:
这对我有用。然而,我知道,如果我改变视角,红色贝壳就会出现在黑色贝壳之上。我后来发现的一个问题是 .plot 函数没有 vmin 和 vmax 参数(与 .scatter 一样),这使得将颜色定义为从 vmin 和 vmax 开始的渐变变得更加困难......
| 归档时间: |
|
| 查看次数: |
5060 次 |
| 最近记录: |