如何为Mayavi mlab绘制的3D图添加完整的外围坐标轴包围框
解决方案
Mayavi的mlab.axes()默认仅显示3个低侧坐标轴,要渲染完整的六面外围包围框,手动开启三个坐标轴对侧的显示权限即可,也可同步设置包围框边线样式保证视觉统一。
修改后的完整可运行代码如下:
import matplotlib.pyplot as plt from mayavi import mlab import numpy as np import matplotlib import mayavi import sys # 版本检查 print( 'matplotlib version: ', matplotlib.__version__ ) print( 'mayavi version : ', mayavi.__version__ ) print( 'numpy版本 : ', np.__version__ ) print( 'python版本 : ', sys.version_info ) # 生成网格 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) # 生成绘图数据 dat = np.cos(X) * np.sin(Y) * np.cos(Z) # 绘制3D等高线,extent参数指定数据对应的真实坐标范围,避免坐标轴显示网格索引值 mlab.contour3d(dat, extent=[x.min(), x.max(), y.min(), y.max(), z.min(), z.max()]) ax1 = mlab.axes( color=(1,1,1), nb_labels=4 ) # 开启所有对侧坐标轴显示,渲染完整包围框 # *每个属性的二元布尔值分别对应[低侧轴显示, 高侧轴显示]* ax1.axes.x_axis_visibility = [True, True] ax1.axes.y_axis_visibility = [True, True] ax1.axes.z_axis_visibility = [True, True] # 可选配置:统一包围框边线颜色、宽度 ax1.axes.property.color = (1,1,1) ax1.axes.property.line_width = 1.0 mlab.show()
关键修改说明
- 给
contour3d添加extent参数,匹配数据的真实坐标范围,避免坐标轴默认显示0到网格数的索引值 x_axis_visibility、y_axis_visibility、z_axis_visibility均为二元布尔数组,分别控制对应坐标轴在两个相对面上的显示状态,全部设置为[True, True]即可同时显示正反两侧坐标轴,形成完整包围框- 可选的
axes.property配置可以调整包围框边线的样式,保证和坐标轴视觉效果统一
内容的提问来源于stack exchange,提问作者Alf
相关产品推荐
相关产品推荐

