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

如何为seaborn热图的不同行设置不同的颜色映射(colormap)

可以实现,核心思路是将数据集拆分后在同一画布上叠加绘制两次热图,分别设置不同配色即可,完整实现代码如下:

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

# 导入数据集
m = np.array([[ 0.7,  1.4,  0.2,  1.5,  1.7,  1.2,  1.5,  2.5],
              [ 1.1,  2.5,  0.4,  1.7,  2. ,  2.4,  2. ,  3.2],
              [ 0.9,  4.4,  0.7,  2.3,  1.6,  2.3,  2.6,  3.3],
              [ 0.8,  2.1,  0.2,  1.8,  2.3,  1.9,  2. ,  2.9],
              [ 0.9,  1.3,  0.8,  2.2,  1.8,  2.2,  1.7,  2.8],
              [ 0.7,  0.9,  0.4,  1.8,  1.4,  2.1,  1.7,  2.9],
              [ 1.2,  0.9,  0.4,  2.1,  1.3,  1.2,  1.9,  2.4],
              [ 6.3, 13.5,  3.1, 13.4, 12.1, 13.3, 13.4, 20. ]])
data = pd.DataFrame(data = m)

# 拆分数据集为前7行和最后一行
data_top = data.iloc[:-1, :]
data_last = data.iloc[[-1], :]

# 初始化画布
fig, ax = plt.subplots()

# 绘制前7行热图,使用红色系配色
sns.heatmap(
    data_top, 
    annot=True, 
    cmap="Reds", 
    vmin=data_top.min().min(), 
    vmax=data_top.max().max(), 
    cbar=False, 
    ax=ax
)

# 叠加绘制最后一行热图,使用蓝色系配色,可自行更换cmap参数调整配色
sns.heatmap(
    data_last, 
    annot=True, 
    cmap="Blues", 
    vmin=data_last.min().min(), 
    vmax=data_last.max().max(), 
    yticklabels=[data.index[-1]], # 匹配原始行索引,避免标签错位
    cbar=False, 
    ax=ax
)

plt.show()

关键说明

  • 两次绘制都指定同一个ax对象,保证热图位置完全对齐
  • 分别为两部分数据设置独立的vmin和vmax,避免最后一行数值过大导致前7行颜色梯度区分度低;若需要两部分使用统一的数值映射规则,可将两个vmin/vmax均设置为整个数据集的最小/最大值
  • 可根据需求修改第二个sns.heatmap的cmap参数,更换为你需要的配色方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:27:03