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

如何使用Python绘制二维FEM(有限元)网格?

目标网格效果

问题分析

你现有代码的核心问题如下:

  • 目标是绘制2D填充网格,却误用了3D绘图组件,增加了不必要的复杂度
  • 顶点坐标定义不全,连通性数组中用到的4、5号索引超出了你现有4个顶点的范围,会直接报错
  • 3D多边形集合类不适用2D网格绘制场景

实现方案

如果是要绘制基于节点数值的填充矩形网格,推荐使用matplotlib.collections.PolyCollection处理不规则四边形网格,或者直接用pcolormesh处理规则网格,以下是可运行的参考实现:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.collections import PolyCollection

# 1. 定义所有顶点坐标,示例覆盖你写的连通性索引范围,可按需调整
vertices = np.array([
    [0, 0.06],   # 0号顶点
    [25, 0.6],   # 1号顶点
    [25, 0.1],   # 2号顶点
    [0, 0.125],  # 3号顶点
    [25, 0.125], # 4号顶点
    [25, 0.2]    # 5号顶点
])

# 2. 定义连通性:每个四边形对应的4个顶点索引
connectivity = np.array([[0,3,4,1],[1,4,5,2]])

# 3. 组装每个四边形的顶点
polys = vertices[connectivity]

# 4. 定义每个网格对应的数值(用于填充颜色,和连通性顺序对应)
cell_values = np.array([1.2, 3.5])

# 5. 绘图
fig, ax = plt.subplots()
poly_col = PolyCollection(polys, edgecolor='black', cmap='viridis')
poly_col.set_array(cell_values)
ax.add_collection(poly_col)
ax.autoscale()
plt.colorbar(poly_col, label='节点对应数值')
plt.show()

如果是规则的等距矩形网格,直接用pcolormesh更简单,示例如下:

import matplotlib.pyplot as plt
import numpy as np

# 生成规则网格坐标
x = np.linspace(0, 25, 5)
y = np.linspace(0, 0.6, 4)
X, Y = np.meshgrid(x, y)
# 定义每个网格的数值
Z = np.random.rand(Y.shape[0]-1, X.shape[1]-1)

plt.pcolormesh(X, Y, Z, edgecolor='black', cmap='viridis')
plt.colorbar(label='数值')
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:15:00