我有一个由蓝色表面(绘制通过plot_surface)和红色球体(绘制通过scatter)组成的图.曲面的zorder设置为0,并且球体的zorder设置为1(尽管未设置任何zorder值会产生相同的结果).
您可以看到红色球体位于曲面的左侧:

当我旋转绘图时,您可以看到红色球体开始消失在蓝色表面后面,即使它在它前面:

直到红色球体完全消失:

奇怪的是,对于某些角度/视图,红色球体重新出现并再次可见,例如:

这里发生了什么?我已经阅读了其他一些与绘图/ zorder相关的问题,但我还没有看到这种行为,其中一个对象明显位于另一个对象的前方/前方,并且在大多数视角下无法正确显示.
如果我使蓝色表面透明,当它在下面的图中消失时,你可以看到表面后面的红色球体(所以看起来绘图库实际上认为它在表面后面).
从 Matplotlib 3.5.0 开始,axis3d 有一个设置可以解决这个问题。此设置称为Computed_zorder。
例子:
ax = plt.axes(projection='3d',computed_zorder=False)
ax.plot_surface(X, Y, Z,zorder=1)
ax.plot_surface(U, V, W,zorder=2)
Run Code Online (Sandbox Code Playgroud)
zorder最高的元素将显示在顶部。
此处列出了一些默认zorder值:
| 艺术家 | 佐德 |
|---|---|
| 图像(AxesImage、FigureImage、BboxImage) | 0 |
| 补丁、补丁集合 | 1 |
| Line2D、LineCollection(包括小刻度、网格线) | 2 |
| 主要蜱虫 | 2.01 |
| 文本(包括轴标签和标题) | 3 |
| 传奇 | 5 |
这在 Matplotlib 1.5.3 (2016) 中仍然是一个问题。@tacaswell(Matplotlib 开发联合负责人)推荐的替代方案是使用 Mayavi 处理 3D 绘图,这在 Python 绘图库中相对独特,因为它不像许多其他项目(Pandas、 Seaborn,ggplot)。
我可以使用Homebrew和 pip在 OSX 上轻松安装 Mayavi 。
#/bin/bash
# vtk is a mayavi requirement
brew install vtk
pip install mayavi
# Port your matplotlib code to mayavi
# Profit...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2805 次 |
| 最近记录: |