python使用vtk与mayavi三维可视化绘图

2023-12-14 23:26:57

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()

文章来源:https://blog.csdn.net/u011740601/article/details/134918368
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。