You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PyVista创建二维二次网格并为不同单元组设置差异化颜色

PyVista二维二次网格按单元分组着色实现

所有PyVista网格类型的单元着色逻辑通用,不存在非结构化网格专属的着色接口:核心是给网格绑定单元维度的分类标量,再通过自定义颜色映射匹配对应颜色即可。

完整实现代码

import pyvista as pv
import numpy as np

# 1. 生成20×10规模的二维二次四边形网格
# 先生成同规模线性平面网格,再转二次单元,无需手动构造节点连通性
grid = pv.Plane(
    i_size=20,
    j_size=10,
    i_resolution=20,
    j_resolution=10
).cast_to_unstructured_grid()
# 线性单元转二次单元(边中点自动新增节点,满足二次网格精度要求)
grid = grid.linear_to_quadratic()

# 校验单元总数,确认是20*10=200个单元
assert grid.n_cells == 200, f"单元数不符合预期,当前为{grid.n_cells}"

# 2. 按要求给单元打分组标签
cell_tags = np.full(grid.n_cells, fill_value=2, dtype=np.int8)
cell_tags[:50] = 0       # 前50个单元标签0,对应蓝色
cell_tags[50:100] = 1    # 第51-100个单元标签1,对应红色
# 剩余单元标签保持2,对应绿色
# 将标签绑定到网格单元数据
grid.cell_data["cell_group"] = cell_tags

# 3. 自定义颜色映射并渲染
custom_cmap = [
    (0, 0, 1),   # 标签0对应蓝色
    (1, 0, 0),   # 标签1对应红色
    (0, 1, 0)    # 标签2对应绿色
]

plotter = pv.Plotter()
plotter.add_mesh(
    grid,
    scalars="cell_group",
    cmap=custom_cmap,
    clim=[0, 2],  # 固定标量范围,避免颜色映射偏移
    show_edges=True,
    line_width=0.5
)
plotter.camera_position = "xy"  # 固定为正二维视角
plotter.show()

关键说明

  • 不需要专门查找非结构化网格的着色方法:结构化网格、非结构化网格、多面体网格的着色逻辑完全一致,只要将分类数据写入cell_data(按单元着色)或point_data(按节点着色),再在add_mesh时通过scalars指定对应字段名即可。
  • 二次网格不需要手动构造:通过linear_to_quadratic()方法可以直接将任意线性单元网格转为对应类型的二次单元网格,自动补全高阶节点,避免手动编写连通性的繁琐工作。
  • 自定义颜色映射时必须指定clim参数和标签的取值范围一致,否则会出现颜色和分组不匹配的问题。

内容的提问来源于stack exchange,提问作者YassineBenJemaa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 11:54:23