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

如何为有限元分析(FEM)中的多个多边形设置统一色阶填充

有限元分析可视化问题:统一颜色刻度解决方案

问题背景

进行有限元分析(FEM)时,结果可视化环节遇到如下问题:单个多边形(三角形、四边形)可正常按需求完成颜色填充,但添加第二个多边形后,颜色刻度会重置,导致同一节点的应力在不同区域呈现不同颜色。

原代码如下:

tri1 = np.array([[0.25,0.1],[1,2],[0.5,2]])
val1 = np.array([1,3,2])
tri2 = np.array([[0.5,2],[1,2],[1.2,3.75]])
val2 = np.array([2,3,6])

mat1 = np.c_[tri1,val1]
mat2 = np.c_[tri2,val2]
fig,ax = plt.subplots()

def colourfill(mat_global,ax, label = None):
    import matplotlib.tri as tri
    triangulacion = tri.Triangulation(mat_global[:,0],mat_global[:,1])
    
    pc = ax.tripcolor(triangulacion, mat_global[:,2], cmap='viridis', shading='gouraud')
    
    cbar = plt.colorbar(pc)
    cbar.set_label(label)


colourfill(mat1,ax,'Testing')
colourfill(mat2,ax)
plt.show()

当前输出效果:两个三角形分别使用独立的颜色刻度,左侧三角形颜色对应数值范围1-3,右侧对应2-6,导致共享节点(如[0.5,2]、[1,2])在两个区域显示颜色不一致,且生成了两个重复的色条。

问题原因

每次调用colourfill函数时,都会创建新的colorbar,并且tripcolor默认根据当前传入的数据范围自动设置颜色映射的最小值(vmin)和最大值(vmax),导致不同多边形的颜色刻度不统一。

解决方案

通过计算全局数据范围,强制所有绘图使用统一的vmin和vmax,并仅创建一次色条,实现颜色刻度统一和规范的色条输出。

修改后的代码:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.tri as tri

tri1 = np.array([[0.25,0.1],[1,2],[0.5,2]])
val1 = np.array([1,3,2])
tri2 = np.array([[0.5,2],[1,2],[1.2,3.75]])
val2 = np.array([2,3,6])

mat1 = np.c_[tri1,val1]
mat2 = np.c_[tri2,val2]
fig,ax = plt.subplots()

# 计算所有数值的全局范围
all_values = np.concatenate([val1, val2])
global_vmin = all_values.min()
global_vmax = all_values.max()

def colourfill(mat_global, ax, vmin, vmax):
    triangulacion = tri.Triangulation(mat_global[:,0], mat_global[:,1])
    # 指定统一的颜色刻度范围
    pc = ax.tripcolor(triangulacion, mat_global[:,2], cmap='viridis', shading='gouraud',
                      vmin=vmin, vmax=vmax)
    return pc

# 绘制两个三角形,共用全局颜色刻度
pc = colourfill(mat1, ax, global_vmin, global_vmax)
colourfill(mat2, ax, global_vmin, global_vmax)

# 仅创建一次规范色条
cbar = plt.colorbar(pc)
cbar.set_label('Testing')

plt.show()

关键修改说明

  1. 全局范围计算:合并所有多边形的数值数据,计算出全局的最小值和最大值,确保颜色映射覆盖整个数据集的范围。
  2. 统一颜色刻度:在tripcolor中传入vmin和vmax参数,强制所有多边形使用同一颜色映射规则,避免刻度重置。
  3. 单一色条创建:将色条创建逻辑移到所有多边形绘制完成后,只生成一个规范的色条,避免重复。

内容的提问来源于stack exchange,提问作者Juan Diego Oliva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:30:59