如何在Python中绘制梁沿X方向厚度变化的彩色编码图
问题翻译与解决方案
问题描述
需要绘制梁沿长度方向的厚度变化彩色编码图,要求:
- 彩色块按等高图规则编码:深色对应厚度大的梁段,浅色对应厚度小的梁段
- 附带对应实际厚度值的色标
现有数据: beamsectionsx:梁段在X轴上的分界点数组(范围0-66.62m)thicknessy:对应每段梁的厚度数组(数组长度比beamsectionsx少1,每个元素对应相邻两个分界点之间的梁段厚度)
当前问题:绘制时色标错误对应数组元素的索引长度,而非梁的实际X轴范围。
解决方案
使用Matplotlib的pcolormesh函数实现,该函数可直接基于实际坐标范围绘制彩色块,并生成对应厚度值的色标。代码如下:
import numpy as np import matplotlib.pyplot as plt # 原始数据 beamsectionsx = np.array([ 0. , 2.65 , 6.25 , 10.45 , 14.05 , 17.25 , 20.05 , 23.05 , 26.05 , 29.05 , 32.12 , 34.72 , 37.32 , 40.92 , 44.72 , 48.52 , 52.32 , 55.42 , 58.512, 61.612, 63.702, 63.825, 64.02, 66.62 ]) thicknessy = np.array([0.4, 0.099, 0.099,0.099,0.1,0.099, 0.079,0.079, 0.079, 0.081, 0.084, 0.088, 0.091, 0.092, 0.095, 0.094, 0.093, 0.09, 0.082, 0.068, 0.068, 0.075, 0.095]) # 构造绘图用的网格数据 # X轴网格:将分界点扩展为二维,匹配pcolormesh输入格式 X = np.repeat(beamsectionsx[np.newaxis, :], 2, axis=0) # Y轴网格:设置固定高度范围,仅用于展示彩色块 Y = np.array([[0, 1]]) # 厚度数据扩展为二维:每个厚度值对应一个X区间 Z = np.repeat(thicknessy[np.newaxis, :], 2, axis=0) # 创建绘图对象 fig, ax = plt.subplots(figsize=(12, 2)) # 绘制彩色块,Blues色系默认深色对应大厚度,符合需求 pcm = ax.pcolormesh(X, Y, Z, cmap='Blues', edgecolor='white') # 设置X轴为梁的实际长度范围 ax.set_xlim(beamsectionsx[0], beamsectionsx[-1]) # 隐藏Y轴,聚焦X方向厚度变化 ax.set_yticks([]) ax.set_xlabel('梁长度(m)') ax.set_title('梁沿长度方向厚度变化彩色编码图') # 添加对应实际厚度值的色标 fig.colorbar(pcm, ax=ax, label='厚度(m)') plt.tight_layout() plt.show()
关键说明
- 网格数据构造:通过
np.repeat将一维分界点和厚度数组转为二维格式,确保彩色块严格对应实际X轴区间,避免索引错位。 - 颜色映射适配:
'Blues'色系天然满足“深色对应厚段、浅色对应薄段”的要求,若需反转可改用'Blues_r'。 - 色标校准:色标直接基于厚度数组生成,刻度对应实际厚度值,彻底解决原始问题中的色标范围错误。
内容的提问来源于stack exchange,提问作者Vaishnavi Thavarajah
相关产品推荐
相关产品推荐

