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

如何使用matplotlib将pandas dataframe绘制成颜色映射强度的水平线条

多温度频率强度热力图实现方案

首先修正你提供的模拟数据代码的笔误,再给出完整可运行的绘图实现:

1. 模拟数据生成

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import Normalize

np.random.seed(1)
# 定义x轴(频率)和温度列
columns = ['frequency', '275 K', '300 K', '325 K']
# 生成频率序列
x = np.linspace(-5, 5, 100)
# 生成三个温度下的含噪强度信号
noise = np.random.randn(3, len(x))
# 构造DataFrame,修正原代码的笔误columns=T为columns=columns
df = pd.DataFrame(np.vstack((x, noise)).T, columns=columns)

2. 绘图实现

我们采用pcolormesh方案,可直接让y轴位置与真实温度值一一对应,无需额外手动标注标签:

# 提取温度数值列表
temp_values = np.array([275, 300, 325])
# 提取强度矩阵,形状为 [温度数量, 频率采样点数量]
intensity_mat = df[['275 K', '300 K', '325 K']].values.T
# 提取频率序列
freq = df['frequency'].values

# 调整该参数可修改水平热力条的高度
bar_height = 5
# 生成绘图所需的网格边界
y_edges = np.concatenate([[t - bar_height/2, t + bar_height/2] for t in temp_values])
x_edges = np.concatenate([freq, [freq[-1] + (freq[1] - freq[0])]])
# 扩展强度矩阵匹配网格维度
intensity_expand = np.repeat(intensity_mat, 2, axis=0)

# 初始化画布
fig, ax = plt.subplots(figsize=(8, 4))
# 绘制热力图,可自行修改cmap参数更换色卡
norm = Normalize(vmin=intensity_mat.min(), vmax=intensity_mat.max())
pcm = ax.pcolormesh(x_edges, y_edges, intensity_expand, norm=norm, cmap='viridis', shading='flat')
# 添加强度颜色条
fig.colorbar(pcm, ax=ax, label='Intensity')

# 设置轴标签
ax.set_xlabel('Frequency')
ax.set_ylabel('Temperature (K)')
# 设置y轴刻度为真实温度值
ax.set_yticks(temp_values)
# 调整y轴范围让显示更紧凑
ax.set_ylim(temp_values.min() - bar_height, temp_values.max() + bar_height)

plt.show()

效果说明

  • 每个温度对应一条独立的水平热力条,y轴坐标与实测温度完全匹配
  • 颜色直接映射强度数值,支持自定义色卡、归一化范围等参数
  • 如果温度为连续采样序列,可直接用imshow配合extent参数设置y轴温度范围,代码逻辑更简洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:06:04