一,介绍
PyVista是一个用于3D可视化和网格处理的Python库,它提供了一种简单而强大的方式来创建、渲染和分析复杂的三维数据集和网格。PyVista建立在VTK(Visualization Toolkit)和NumPy之上,为用户提供了许多方便的工具和功能,使其在处理和可视化大型数据集时变得更加容易和高效。
二,PyVista的主要功能包括:
-
三维数据可视化:PyVista支持各种各样的可视化效果,包括绘制网格、体绘制、等值面绘制、矢量场绘制等。用户可以轻松地创建各种类型的可视化效果,以便更好地理解和分析数据。
-
网格处理:PyVista提供了许多功能强大的网格处理工具,例如网格滤波、剖分、重采样等。这些工具可以帮助用户对网格进行各种操作,使其更加适合特定的需求。
-
与其他Python库的集成:PyVista与许多其他Python库兼容,包括pandas、scipy、scikit-learn等,使用户可以轻松地将PyVista与这些库结合使用,从而更好地处理和分析数据。
-
交互式可视化:PyVista支持交互式可视化,用户可以在图形界面中旋转、缩放、平移数据集,以便更好地查看数据。此外,PyVista还支持在Jupyter Notebook中进行交互式可视化,使用户可以直接在Notebook中查看和操作数据。
总的来说,PyVista是一个功能强大而灵活的Python库,为用户提供了丰富的工具和功能,使其能够更好地处理和可视化各种类型的三维数据。通过PyVista,用户可以快速、简单地创建高质量的三维可视化效果,从而更好地理解和分析数据。PyVista的使用范围非常广泛,包括地质学、生物医学、工程学等领域,为用户提供了一个强大的工具,帮助他们更好地处理
三,预告示例代码
import pyvista as pv # 导入PyVista库
# 读取STL文件并创建网格对象
mesh = pv.read('bun_zipper_res4.STL')
# 默认绘制网格
mesh.plot()
# 设置相机位置
cpos = [(0.036, 0.367, 0.884), (0.024, 0.033, -0.022), (-0.303, 0.895, -0.325)]
# 创建Plotter对象,并以点形式绘制网格
pl = pv.Plotter()
pl.add_mesh(mesh, style='points', color='magenta', render_points_as_spheres=True, point_size=10)
pl.show(cpos=cpos)
# 创建Plotter对象,并显示网格边缘
pl = pv.Plotter()
pl.add_mesh(mesh, show_edges=True)
pl.show(cpos=cpos)
# 创建Plotter对象,显示网格边缘,并定制点的颜色和大小
pl = pv.Plotter()
pl.add_mesh(
mesh,
show_edges=True,
vertex_color='magenta',
render_points_as_spheres=True,
point_size=10,
show_vertices=True,
)
pl.show(cpos=cpos)
# 提取网格表面的点
surf_points = mesh.extract_surface().points
# 创建Plotter对象,显示网格边缘和表面点,并按第二列的值对点进行着色
pl = pv.Plotter()
pl.add_mesh(mesh, show_edges=True)
pl.add_points(
surf_points,
color='magenta',
render_points_as_spheres=True,
point_size=10,
scalars=surf_points[:, 1],
lighting=False,
show_scalar_bar=False,
)
pl.show(cpos=cpos)
运行结果;
四,为什么选择 PyVista?
VTK 是一个出色的可视化工具包,并且具有 Python 绑定 应该能够将 C++ 的速度与快速原型设计相结合 的 Python 的。然而,尽管有这些 VTK 代码,用 Python 编程 通常看起来与 C++ 对应项相同。本模块旨在 简化网格创建和绘图,而不会丢失功能。
PyVista 数据模型和 API 允许您快速加载网格和 处理大部分设置绘图的“繁重工作”,连接 类和管道,以及清理绘图窗口。它这样做 通过向 VTK 的类公开一个简化但实用的接口。
在 中,PyVista 会自动确定正确的 文件读取器,并返回一个 DataSet 对象。 此 dataset 对象包含类可用的所有方法(包括方法),允许您立即生成 网格。垃圾回收会自动处理,并且 渲染器在用户关闭绘图窗口后被清理。
同时,可以生成各种 PyVista 对象 直接从 NumPy 数组中获取。例如,下面我们生成一个向量 箭头字段使用 :
import pyvista
import numpy as np
# 创建网格
# Make a grid
x, y, z = np.meshgrid(np.linspace(-5, 5, 20),
np.linspace(-5, 5, 20),
np.linspace(-5, 5, 5),
indexing='ij')
points = np.empty((x.size, 3))
points[:, 0] = x.ravel('F')
points[:, 1] = y.ravel('F')
points[:, 2] = z.ravel('F')
# 计算矢量场的方向
direction = np.sin(points)**3
# 使用绘图类进行绘图
pl = pyvista.Plotter()
pl.add_arrows(points, direction, 0.5)
pl.show()
运行结果: