如何在 Mayavi mlab 图周围绘制一个完整的框?

How to draw a full box around a Mayavi mlab plot?

我正在使用 Mayavi 模块中的 mlab 制作一些体积数据的 3D 等高线图。我想围绕该图绘制一个带有轴的框,但我只能得到一个 x 轴、一个 y 轴和一个 z 轴。不绘制与这些轴相对的轴。我如何获得那些缺失的轴?

这是我的代码:

import matplotlib.pyplot as plt
from mayavi import mlab
import numpy as np

import matplotlib
import mayavi
import sys

# check versions
print( 'matplotlib version: ', matplotlib.__version__ )
print( 'mayavi version    : ', mayavi.__version__ )
print( 'numpy version     : ', np.__version__ )
print( 'python version    : ', sys.version_info )

# create the grid
x       = np.linspace(0,np.pi,100)
y       = np.linspace(0,2*np.pi,200)
z       = np.linspace(0,2*np.pi,400)
X, Y, Z = np.meshgrid(x, y, z)

# create the data to be plotted
dat = np.cos(X) * np.sin(Y) * np.cos(Z)

# make a 3D contour plot
mlab.contour3d(dat)
ax1 = mlab.axes( color=(1,1,1), nb_labels=4 )
mlab.show()

版本检查输出如下:

matplotlib version:  3.5.0
mayavi version    :  4.7.4
numpy version     :  1.21.4
python version    :  sys.version_info(major=3, minor=8, micro=10, releaselevel='final', serial=0)

最后是图像,可以清楚地看到绘图周围没有完整的框:

答案其实很简单:mlab.outline()。必须用以下代码替换等高线绘图部分:

# make a 3D contour plot
cont3d  = mlab.contour3d(dat)
ax1     = mlab.axes( color=(1,1,1), nb_labels=4 )
mlab.outline(cont3d)
mlab.show()