大数跨境

如何在ABAQUS种使用Matplotlib自定义的色谱图

如何在ABAQUS种使用Matplotlib自定义的色谱图 文宇元智科技
2025-07-12
3
导读:场输出的可视化是定性和定量评估数值模型结果的常见方法。在Abaqus以及大多数有限元软件包中,最流行的颜

  场输出的可视化是定性和定量评估数值模型结果的常见方法。在Abaqus以及大多数有限元软件包中,最流行的颜色映射是著名的“Jet”“rainbow”,它从蓝色到红色之间还穿插了绿色和黄色调。尽管这种颜色调板已经成为一种默认标准,但它在大多数问题中并不能体现视觉上美观,可能会扭曲数据的可视化效果。在本文中,我想向您展示如何在Abaqus中使用自定义颜色映射,并借助Matplotlib来实现。

  通常情况下,最合适的色图被称为感知均匀色图。此外,为了显示有序数据(如位移、应力等),它们还需要是连续的。因此,我们需要均匀的连续色图。

  不同颜色映射的性能:a)冷暖,b)彩虹,c)灰度,d)地狱火,e)等亮度和f)蓝黄

1. Abaqus中自定义色图(手动)

我们可以在Abaqus/Viewer中手动设置自己的颜色映射,方法如下:

Contour Plot Options → Color & Style → Spectrum → Create Spectrum

后我们逐个引入每种颜色来构建我们想要的颜色映射,点击确定,最后将其选择为当前的颜色映射。

Abaqus/Viewer中创建自己的色图的步骤

  通过这种方式,我们可以在Abaqus中创建自己的颜色映射,并将其应用于场输出变量(位移、应力、塑性变形、损伤等)的可视化。

    然而,如果我们想使用准确的颜色映射,例如Matplotlib内置的viridiscividisinferno或其他感知均匀连续颜色映射,则手动创建颜色映射非常繁琐

2. Abaqus中自定义颜色映射(脚本)

    Abaqus中创建颜色映射的更实用选项是使用一个定义它们的Python脚本。通过以下Python函数来创建颜色映射:

session.Spectrum(name, colors)

  其中name是一个字符串(例如“MyCmap”),colors是一个以十六进制格式表示颜色的字符串列表(例如[“#ff0000”“#00ff00”“#0000ff”])。

  运行以下脚本在Abaqus中创建一些令人惊叹的颜色映射。

from abaqusConstants import *
# Perceptually uniform sequential colormapscolormaps = {'viridis': ['#440154', '#46317e', '#365c8d', '#277f8e', '#1fa287', '#49c26d', '#a0da39', '#fee724'], 'plasma': ['#0c0787', '#5301a3', '#8b09a5', '#b93289', '#dc5c68', '#f48849', '#febd2a', '#f0f921'], 'inferno': ['#000003', '#270b53', '#65156e', '#9f2a63', '#d54841', '#f67d15', '#fbc228', '#fdffa5'], 'magma': ['#000003', '#221150', '#5f177f', '#982c80', '#d4436e', '#f9765c', '#ffbb81', '#fcfdbf'], 'cividis': ['#00224e', '#213b6e', '#4c556c', '#6c6e72', '#8e8978', '#b2a570', '#d9c55c', '#fee837']}
# Colormaps are Spectrum objects in Abaqus/CAEfor name, colors in colormaps.items():
# Spectrum with the colors in order session.Spectrum(name=name, colors=colors)
# Spectrum with the colors in reversed order session.Spectrum(name=name + 'R', colors=colors[::-1])

1行:我们需要导入abaqusConstants以便访问session

48行:colormaps定义为一个字典,名称作为键,颜色列表作为值。颜色以十六进制格式的字符串表示。

11行:使用for循环遍历所有的colormaps

14行:Abaqus中创建spectrumcolormap)。

17行:Abaqus中创建反转的spectrum

  现在,可以使用这些光谱之一(viridisplasmainfernomagmacividis)及其反转版本(viridisRplasmaRinfernoRmagmaRcividisR)来可视化您的odbs中的数据。

3. Abaqus中自定义颜色映射(环境文件)

  我们可以通过环境文件(environment file)使Abaqus在每次打开Abaqus/CAE时运行这些Python命令(用于创建颜色映射)。实现此目标的步骤如下:

a. 在您的Abaqus安装目录中找到custom_v6.env文件。在我的情况下(Abaqus 2020学生版),路径为:C:\SIMULIA\CAE\2020SE\win_b64\SMA\site

b. 该文件包含用于自定义Abaqus/CAE行为和默认选项的Python命令。在较旧的Abaqus版本中,要编辑的文件将是abaqus_v6.env

c. 创建一个名为'onCaeStartUp'的函数,不带任何参数,并将上述行放在下面所示的位置(别忘了先导入abaqusConstants):

from abaqusConstants import *
def onCaeStartup():
# Perceptually uniform sequential colormaps colormaps = {'Viridis': ['#440154', '#46317e', '#365c8d', '#277f8e', '#1fa287', '#49c26d', '#a0da39', '#fee724'], 'Plasma': ['#0c0787', '#5301a3', '#8b09a5', '#b93289', '#dc5c68', '#f48849', '#febd2a', '#f0f921'], 'Inferno': ['#000003', '#270b53', '#65156e', '#9f2a63', '#d54841', '#f67d15', '#fbc228', '#fdffa5'], 'Magma': ['#000003', '#221150', '#5f177f', '#982c80', '#d4436e', '#f9765c', '#ffbb81', '#fcfdbf'], 'Cividis': ['#00224e', '#213b6e', '#4c556c', '#6c6e72', '#8e8978', '#b2a570', '#d9c55c', '#fee837']}
# Colormaps are Spectrum objects in Abaqus/CAE for name, colors in colormaps.items():
# Spectrum with the colors in order session.Spectrum(name=name, colors=colors)
# Spectrum with the colors in reversed order session.Spectrum(name=name + 'R', colors=colors[::-1])

3行:onCaeStartup函数的定义。

619行:将前一个脚本中的所有命令放入此函数中。

就像这样,每当我们启动Abaqus/CAE时,这些颜色映射将被创建,并且随时可用!

4. 进一步使用Matplotlib

在上面的脚本中,颜色列表是硬编码的,然而我们可以通过访问Matplotlib colormaps来在运行时创建这些颜色列表。

通过这种方式,我们可以非常容易地包含额外的colormap,只需将它们的名称添加到名称列表中(例如springcoolWistia...)。请参阅Matplotlib中完整的colormap名称列表。

# Import matplotlib (available from Abaqus 2020)import matplotlib.pyplot as pltimport matplotlibimport numpy as np
# List of colormapsnames = ('viridis', 'plasma', 'inferno', 'magma', 'cividis', # perceptually uniform 'summer', 'autumn', 'spring', 'cool', 'hot', 'Wistia') # other colormaps
for name in names:
if name not in plt.colormaps(): # Skip colormap if not found print('Colormap not found: ' + name) continue
# Get Matplotlib colormap by name cmap = plt.get_cmap(name)
# Take 10 evenly spaced colors from the colormap # A colormap takes values from 0 to 1 an returns a color: (R, G, B, A) colors_rgba = map(cmap, np.linspace(0., 1., 10))
# Convert RGBA colors into hexadecimal format: #rrggbb colors_u = map(matplotlib.colors.to_hex, colors_rgba)
# Convert unicode strings to regular strings colors = map(str, colors_u)
# Colormaps are Spectrum objects in Abaqus/CAE session.Spectrum(name=name, colors=colors) # Colormap session.Spectrum(name=name + 'R', colors=colors[::-1]) # Reversed colormap

2行和第3行:我们需要导入matplotlib库(以及pyplot)。

7行和第8行:定义一个包含从Matplotlib中读取的颜色映射名称的列表。

1214行:如果当前颜色映射在Matplotlib可用的颜色映射(plt.colormaps())中找不到,则跳过它。

17行:根据名称获取颜色映射(plt.get_cmap(name))。

21行:生成当前颜色映射的10个均匀间隔的颜色(colors_rgba)。这些颜色是具有红-绿--透明度值(RGBA)的元组。

24行:RGBA格式中的颜色转换为十六进制格式字符串。

27行:来自23行的字符串是Unicode编码,因此我们必须将它们转换为常规字符串。

  在本文中,我们介绍了如何在Abaqus中创建自己的颜色映射,并将其用于场输出的可视化。我们可以在Abaqus/CAE中手动完成,也可以利用Python脚本加快此过程。

   同时,我们还有机会简单了解使用Abaqus环境文件的可能性。在这种情况下,通过基于Matplotlib库创建自定义颜色映射来定制Abaqus界面。

【声明】内容源于网络
0
0
文宇元智科技
拥有复合材料多尺度仿真与疲劳寿命预测、ABAQUS高级建模及Fortran/Python二次开发经验,可提供:1.复合材料结构仿真与优化2.疲劳损伤仿真与寿命预测技术3.CAE-Python自动化工具链搭建4.有限元-机器学习融合模型开发
内容 72
粉丝 0
文宇元智科技 拥有复合材料多尺度仿真与疲劳寿命预测、ABAQUS高级建模及Fortran/Python二次开发经验,可提供:1.复合材料结构仿真与优化2.疲劳损伤仿真与寿命预测技术3.CAE-Python自动化工具链搭建4.有限元-机器学习融合模型开发
总阅读123
粉丝0
内容72