PyVista技术问询:如何在垂直切片上生成等值线?
关于PyVista切片上生成等值线的问题
PyVista的slices功能是探索网格的实用工具:
我的问题
能否在xz平面这类切片上生成等值线?
当前可行方案
在xy平面上生成等值线的逻辑运行正常。
预期目标
我基于复杂地形生成了三维曲面网格,其中马特洪峰是iz=0处的下边界,该网格用于马特洪峰周边的气流模拟(未展示)。PyVista的切片功能会是分析模拟结果的绝佳工具:
解决方案
当然可以在任意平面的切片上生成等值线,核心是先获取切片对应的二维数据集,再对其调用等值线生成方法,具体步骤如下:
1. 准备三维网格数据
假设你已经有包含模拟标量场(如速度、压强)的三维网格,示例代码如下:
import pyvista as pv import numpy as np # 替换为你的实际网格数据 grid = pv.UniformGrid() grid.dimensions = [50, 50, 50] grid.spacing = [1, 1, 1] grid.origin = [0, 0, 0] # 添加模拟标量场(示例:随x、z变化的速度场) grid["velocity"] = np.sin(grid.points[:, 0]/10) * np.cos(grid.points[:, 2]/10)
2. 创建xz平面切片
指定切片平面的法向量(xz平面法向量为y轴方向[0,1,0])和原点位置:
# 生成y=25位置的xz平面切片,可根据需求调整原点 xz_slice = grid.slice(normal=[0, 1, 0], origin=[25, 25, 25])
3. 在切片上生成等值线
直接对切片数据集调用contour方法,可指定等值线条数或具体数值:
# 基于"velocity"标量场生成10条等值线 contours = xz_slice.contour(10, scalars="velocity")
4. 可视化切片与等值线
将切片和等值线一同渲染展示:
plotter = pv.Plotter() plotter.add_mesh(xz_slice, opacity=0.5, cmap="viridis") plotter.add_mesh(contours, color="white", line_width=2) plotter.show()
关键说明
- 该方法适用于所有平面切片(xy、xz、yz或任意自定义平面),只要通过
slice得到切片数据集,即可调用contour生成等值线。 - 无论是结构化还是非结构化网格,PyVista都能自动处理切片后的数据集,无需额外转换。
内容的提问来源于stack exchange,提问作者pyano
相关产品推荐
相关产品推荐

