【问题标题】:How to plot 2D gradient(rainbow) by using matplotlib?如何使用 matplotlib 绘制 2D 渐变(彩虹)?
【发布时间】:2017-10-05 01:00:06
【问题描述】:

我尝试使用 matplotlib 库绘制梁的应力。

我已经使用公式计算并绘制了一个例子:

如图 1 所示,您将看到绿色光束在单元 3 和单元 8 处具有更大的应力因此如果我通过彩虹渐变填充颜色,整个蓝色光束将具有相同的颜色,但绿色光束将具有元素 3 和 8 的不同颜色将比其他颜色更偏向红色。

这是我的一些代码。 将 matplotlib.pyplot 导入为 plt 将 matplotlib 导入为 mpl

node_coordinate = {1: [0.0, 1.0], 2: [0.0, 0.0], 3: [4.018905, 0.87781], 4: [3.978008, -0.1229], 5: [1.983549, -0.038322], 6: [2.013683, 0.958586], 7: [3.018193, 0.922264],
                   8: [2.979695, -0.079299], 9: [1.0070439, 0.989987], 10: [0.9909098, -0.014787999999999999]}
element_stress = {'1': 0.2572e+01, '2': 0.8214e+00, '3': 0.5689e+01, '4': -0.8214e+00, '5': -0.2572e+01, '6': -0.4292e+01, '7': 0.4292e+01, '8': -0.5689e+01}

cmap = mpl.cm.jet

fig = plt.figure(figsize=(8, 2))
ax1 = fig.add_axes([0.05, 0.80, 0.9, 0.15])
ax2 = fig.add_axes([0.05, 0.4, 0.9, 0.15])
# ax1 = fig.add_axes([0.2572e+01, 0.8214e+00, 0.5689e+01, -0.8214e+00, -0.2572e+01, -0.4292e+01, 0.4292e+01, -0.5689e+01])
norm = mpl.colors.Normalize(vmin=0, vmax=1)
cb1 = mpl.colorbar.ColorbarBase(ax1, cmap=cmap, norm=norm, orientation='vertical')
cb2 = mpl.colorbar.ColorbarBase(ax2, cmap=cmap, norm=norm, orientation='horizontal')
plt.show()

你会看到我知道所有的节点坐标以及元素的应力值。

附言对不起我的语法,我不是本地人。

谢谢。求建议。

【问题讨论】:

标签: python matplotlib


【解决方案1】:

按照这个example,我想这就是你要找的:

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

node_coordinate = {1: [0.0, 1.0], 2: [0.0, 0.0], 3: [4.018905, 0.87781],
                   4: [3.978008, -0.1229], 5: [1.983549, -0.038322],
                   6: [2.013683, 0.958586], 7: [3.018193, 0.922264],
                   8: [2.979695, -0.079299], 9: [1.0070439, 0.989987],
                   10: [0.9909098, -0.014787999999999999]}
element_stress = {1: 0.2572e+01, 2: 0.8214e+00, 3: 0.5689e+01,
                  4: -0.8214e+00, 5: -0.2572e+01, 6: -0.4292e+01,
                  7: 0.4292e+01, 8: -0.5689e+01}

n = len(element_stress.keys())
x = np.empty(n)
y = np.empty(n)
d = np.empty(n)

for i in element_stress.keys():
    x[i-1] = node_coordinate[i][0]
    y[i-1] = node_coordinate[i][1]
    d[i-1] = element_stress[i]

triang = tri.Triangulation(x, y)

cmap = mpl.cm.jet
fig = plt.figure(figsize=(8, 4))

ax1 = fig.add_axes([0.05, 0.80, 0.9, 0.15])
ax1.tricontourf(triang, d, cmap=cmap)

ax2 = fig.add_axes([0.05, 0.4, 0.9, 0.15])
x_2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
       0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y_2 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
d_2 = x_2[:]
triang_2 = tri.Triangulation(x_2, y_2)
ax2.tricontourf(triang_2, d_2, cmap=cmap)

fig.show()

添加第二个示例是为了澄清,因为从给定数据获得的图表与您从 Comsol 获得的图表不同。

【讨论】:

    猜你喜欢
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 2011-01-18
    • 1970-01-01
    • 2021-12-28
    • 2012-04-20
    • 2015-11-10
    相关资源
    最近更新 更多