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

Matplotlib/Seaborn如何绘制逐时间点独立映射的热电偶时序热力图

实现逐时间点独立颜色映射的热力图方案

核心逻辑:放弃seaborn默认的全局数据归一化,先将数据规整为「行=时间戳、列=热电偶测点」的标准表结构,对每一行单独做归一化后再映射颜色,和Excel逐行设置条件格式的逻辑完全一致,不受全局温度波动影响。


完整实现代码

1. 先规整数据结构

不要用globals()动态生成零散变量,统一存入DataFrame方便批量处理:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 组装27个热电偶的数据,索引为时间轴
tc_df = pd.DataFrame()
for idx in range(1, 28):
    tc_df[f"测点{idx}"] = forceconvert_v(globals()[f"arTTXD{idx}"])
tc_df.index = TimeAxis  # 沿用你之前生成的TimeAxis时间序列

2. 逐时间点做独立归一化(核心步骤)

指定按行计算,每个时间点单独用自身的最大/最小值做归一化,完全不跨时间对比数值:

# 归一化后所有值映射到[0,1]区间,0对应当前时刻最低温,1对应当前时刻最高温
tc_norm = tc_df.apply(
    lambda row: (row - row.min()) / (row.max() - row.min() + 1e-8), # 加1e-8避免同温时除0报错
    axis=1
)

3. 绘制热力图

将归一化后的矩阵转置,让x轴为时间、y轴为测点,直接映射颜色即可:

fig, ax = plt.subplots(figsize=(25, 5))
plt.subplots_adjust(bottom=0.25)

sns.heatmap(
    tc_norm.T,  # 转置后结构为「行=测点、列=时间」,匹配热力图二维输入要求
    cmap="coolwarm",  # 冷色对应低温、暖色对应高温,可按需替换色卡
    ax=ax,
    cbar=False,  # 逐点独立归一化时全局色标无参考意义,需要可设为True
    xticklabels=10000,  # 按数据密度调整x轴刻度间隔,避免标签重叠
    yticklabels=True
)

# 格式化x轴时间标签
ax.set_xticklabels(
    [tc_df.index[int(t)].strftime("%Y-%m-%d %H:%M") for t in ax.get_xticks() if t < len(tc_df)]
)
plt.show()

问题说明

  • 之前切片单个时间点报维度错误的原因:一维长度为27的数组不满足seaborn输入的二维矩阵要求,单个时间点绘图时只要给数组加个维度即可:single_time_data.reshape(-1, 1),但批量归一化方案效率远高于逐点循环,15万级秒级数据无需逐点渲染。
  • 效果完全匹配需求:无论全局温度如何波动,每个时间点的最高温测点固定显示为色卡暖端极值,最低温测点固定显示为冷端极值,不会出现全局升温后冷点颜色错位的问题。
  • 可选调整:如果需要按温度排序而非线性映射颜色,把归一化逻辑替换为逐行排名即可:lambda row: row.rank(pct=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:57:24