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

如何在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()

关键说明

  1. 网格数据构造:通过np.repeat将一维分界点和厚度数组转为二维格式,确保彩色块严格对应实际X轴区间,避免索引错位。
  2. 颜色映射适配:'Blues'色系天然满足“深色对应厚段、浅色对应薄段”的要求,若需反转可改用'Blues_r'。
  3. 色标校准:色标直接基于厚度数组生成,刻度对应实际厚度值,彻底解决原始问题中的色标范围错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:24:38