You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将热力图的实际数值与按行着色的热力图效果相结合?

解决方案:保留原始数值标注 + 每行内部归一化着色

我来帮你搞定这个需求!你想要的效果是显示原始实际数值,但按照每行内部的相对大小来着色,其实不用生成两个独立的热力图,只需要在seaborn.heatmap里分开指定控制颜色的数据集和显示标注的数据集就行。

完整实现代码

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

# 1. 生成原始透视表(和你之前的步骤一致)
df = pd.pivot_table(table, 'avg', index=['col_1'], columns=['col_2'])

# 2. 计算每行内部归一化的数据(用于控制热力图颜色)
# 这里和你生成第二个热力图的逻辑相同:每行除以该行的最大值
df_n = df.div(df.max(axis=1), axis=0)

# 3. 生成目标热力图:核心是分开指定data和annot参数
plt.figure(figsize=(10, 6))  # 可根据需求调整图大小
sns.heatmap(
    df_n,                  # 用归一化后的数据集决定着色规则
    linewidths=.5,
    annot=df,              # 显示原始透视表的实际数值
    cbar=True,             # 保留色条,方便查看归一化后的相对刻度
    fmt='g',               # 保持数值的原始格式(不做小数格式化)
    annot_kws={'size':14}, # 调整标注文字大小
    cmap='YlOrBr'          # 沿用你指定的配色方案
)
plt.show()

关键逻辑说明

  • data=df_n:让热力图根据每行归一化后的数值计算颜色,实现“每行内部数值相对着色”的效果
  • annot=df:强制显示原始透视表的实际数值,而不是归一化后的小数
  • 其他参数(linewidthscmap等)可以完全沿用你之前的设置,不需要修改

这样就能一次性生成你想要的热力图,既保留了真实数值的可读性,又实现了每行独立的颜色对比效果。

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

火山引擎 最新活动