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

如何用Seaborn绘制每行对应不同色阶的热力图?

实现每行独立色阶的Seaborn热力图

要实现每行使用不同颜色范围的热力图,核心思路是对每行数据单独做归一化处理,再为每行分配专属的颜色映射,最后通过Matplotlib手动构建颜色矩阵来绘制。以下是完整实现代码和步骤说明:

完整代码

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn.preprocessing import MinMaxScaler

# 原始数据
d = {'jan': [44, 2, 3, 4],
     'feb': [33, 4, 6, 8],
     'mar': [50, 10, 15, 20],
     'abr': [11, 12, 13, 14],
     'mai': [3, 40, 6, 60],
     'jun': [40, 8, 12, 16]}
idx = ['A', 'B', 'C', 'D']
df = pd.DataFrame(d, index=idx)

# 1. 对每行数据做min-max归一化(缩放到0-1区间)
scaler = MinMaxScaler()
df_scaled = pd.DataFrame(scaler.fit_transform(df.T).T, index=idx, columns=df.columns)

# 2. 为每行指定对应颜色映射
row_cmaps = [
    plt.cm.YlOrBr,  # A行:黄色系
    plt.cm.Blues,   # B行:蓝色系
    plt.cm.Greens,  # C行:绿色系
    plt.cm.Reds     # D行:红色系
]

# 3. 构建颜色矩阵(存储每个单元格的RGB值)
color_matrix = np.zeros((df.shape[0], df.shape[1], 3))
for row_idx in range(df.shape[0]):
    # 获取当前行归一化后的值,匹配对应色映射的颜色
    row_colors = row_cmaps[row_idx](df_scaled.iloc[row_idx].values)
    # 提取RGB通道(丢弃alpha通道)
    color_matrix[row_idx] = row_colors[:, :3]

# 4. 绘制热力图并添加注释
fig, ax = plt.subplots(figsize=(8, 4))
ax.imshow(color_matrix, aspect='auto')

# 添加每个单元格的原始数值注释
for i in range(df.shape[0]):
    for j in range(df.shape[1]):
        ax.text(j, i, df.iloc[i, j], ha='center', va='center', color='black')

# 设置轴标签与样式
ax.set_xticks(np.arange(df.shape[1]))
ax.set_xticklabels(df.columns)
ax.set_yticks(np.arange(df.shape[0]))
ax.set_yticklabels(df.index, rotation=0)
ax.tick_params(top=False, bottom=True, labeltop=False, labelbottom=True)

plt.tight_layout()
plt.show()

关键步骤说明

  1. 行级归一化:使用MinMaxScaler将每行数据独立缩放到0-1区间,确保每行的最大值对应色映射的最深色、最小值对应最浅色,实现行内独立的颜色对比。
  2. 自定义颜色映射:为每行指定不同的Matplotlib内置色映射,满足A黄、B蓝、C绿、D红的需求。
  3. 构建颜色矩阵:遍历每行每列,从对应色映射中提取归一化值对应的RGB颜色,生成可直接绘制的颜色矩阵。
  4. 手动绘制与注释:用imshow绘制颜色矩阵,再通过text函数添加原始数值注释,模拟Seaborn热力图的标注效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:55:16