VTK(Visualization Toolkit)是3D计算机图形学、图像处理和可视化的强大工具。它可以通过Python绑定使用,适合于科学数据的复杂可视化。Mayavi 依赖于 VTK (Visualization Toolkit),一个用于 3D 计算机图形、图像处理和可视化的强大库。
安装
pip install mayavi
pip install vtk
示例代码
- vtk画圆锥
import vtk
# 创建一个锥体
cone = vtk.vtkConeSource()
cone.SetHeight(3.0)
cone.SetRadius(1.0)
cone.SetResolution(10)
# 创建映射器 Mapper
coneMapper = vtk.vtkPolyDataMapper()
coneMapper.SetInputConnection(cone.GetOutputPort())
# 创建演员 Actor
coneActor = vtk.vtkActor()
coneActor.SetMapper(coneMapper)
coneActor.GetProperty().SetColor(0.2, 0.63, 0.79)
coneActor.GetProperty().SetSpecular(0.5)
coneActor.GetProperty().SetSpecularPower(30)
# 创建渲染器 Renderer
renderer = vtk.vtkRenderer()
renderer.AddActor(coneActor)
renderer.SetBackground(0.1, 0.2, 0.4)
# 创建渲染窗口 RenderWindow
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindow.SetSize(800, 600)
# 创建渲染窗口交互器 RenderWindowInteractor
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
# 初始化过程并开始渲染和交互
renderWindow.Render()
renderWindowInteractor.Initialize()
renderWindowInteractor.Start()
- mayavi画3D曲线
from mayavi import mlab
import numpy as np
# Creating data for a 3D parametric curve (a helix)
t = np.linspace(0, 4 * np.pi, 100)
x = np.sin(t)
y = np.cos(t)
z = t
# Plotting the parametric curve
mlab.figure(bgcolor=(1, 1, 1), size=(400, 300))
mlab.plot3d(x, y, z, t, tube_radius=0.1, colormap='Spectral')
# Display the figure
mlab.show()
- mayavi可视化.mat数据
from mayavi import mlab
import scipy.io
import numpy as np
# 加载.mat文件
mat_data = scipy.io.loadmat('a.mat') # 替换为您的.mat文件的路径
data = mat_data['a']
data_magnitude = np.abs(data )
# 创建一个新的Mayavi场景
mlab.figure(bgcolor=(1, 1, 1), size=(800, 600))
# 绘制声场的幅度
src = mlab.pipeline.scalar_field(data )
# 使用 volume 渲染来显示声场数据的内部结构
volume = mlab.pipeline.volume(src)
volume.module_manager.scalar_lut_manager.lut_mode = 'jet' # 设置颜色映射 - 'jet'
# 调整颜色映射范围
volume.module_manager.scalar_lut_manager.use_default_range = False
volume.module_manager.scalar_lut_manager.data_range = [data.min(), data.max()]
# 获取颜色查找表
lut = volume.module_manager.scalar_lut_manager.lut.table.to_array()
# 修改查找表中的透明度通道,增加最大值的透明度
lut[:, -1] = np.linspace(0, 255, lut.shape[0]) # 调整透明度渐变
# 更新查找表
volume.module_manager.scalar_lut_manager.lut.table = lut
# 显示场景
mlab.show()