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

如何在Seaborn热力图中实现颜色按行独立缩放?

实现Seaborn热力图按行缩放颜色

要让热力图的颜色按行独立缩放(每行最高值对应最深色、最低值对应最浅色),核心是对每行数据单独做归一化处理,把每行的数值映射到0-1的区间,这样颜色映射就能基于每行的极值来调整。下面是具体的实现步骤和修改后的代码:

关键思路

Seaborn的heatmap默认是基于整个数据集的全局极值来映射颜色的,所以我们需要先对数据按行做Min-Max归一化:

  • 对每行计算:(当前值 - 行最小值) / (行最大值 - 行最小值)
  • 归一化后,每行的最大值会变成1,最小值变成0,颜色映射就会以行为单位独立生效
  • 注意保留原始数据用于注释,避免显示归一化后的0-1数值造成误解

修改后的完整代码

import seaborn as sns
import pandas as pd

# 生成透视表(你的原有代码)
sales = sales.pivot_table(index='Sources', columns='Category', values='Value')

# 按行执行Min-Max归一化,处理特殊情况(行内所有值相同)
sales_normalized = sales.apply(
    lambda row: (row - row.min()) / (row.max() - row.min()) if row.max() != row.min() else row,
    axis=1
)

# 绘制热力图:用归一化数据控制颜色,原始数据做注释
ax = sns.heatmap(
    sales_normalized,
    annot=sales,  # 显示原始销售数值
    cmap='coolwarm',
    fmt='g',
    linewidths=1,
    linecolor='black'
)
ax.set_title('Sales (Row-Wise Color Scaling)')

代码说明

  1. 归一化处理:使用apply结合axis=1对每行单独计算,同时加入判断避免行内值全相同时的除以零错误
  2. 热力图参数:
    • data传入归一化后的sales_normalized,控制颜色渲染逻辑
    • annot传入原始的sales数据,保证注释显示真实的销售数值
  3. 效果验证:此时每行的最高值会对应coolwarm色系的最深色,最低值对应最浅色,完全按行独立缩放颜色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:27:32