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

如何在Seaborn或Matplotlib中为热图xticks、yticks添加分组colorbar标识

热图刻度分组颜色条实现方案

完全可以实现你需要的刻度分组色块效果,核心思路是在热图的轴外侧,根据分组的索引范围绘制对应颜色的矩形色块即可,以下是完整可运行代码:

import seaborn as sns
from matplotlib import pyplot as plt
import numpy as np
import matplotlib.patches as patches

# 原始数据
mgroup = np.array([1,1,1,2,2,3,3,3,3,4,5,5])
normal_data = np.random.randn(12, 12)
# 自定义分组对应颜色,可按需修改
group_color_map = {
    1: '#4e79a7', # 蓝色
    2: '#f28e2c', # 橙色
    3: '#59a14f', # 浅绿
    4: '#1e3a8a', # 深蓝
    5: '#166534'  # 深绿
}

# 计算每个分组的起止索引
group_intervals = []
current_g = mgroup[0]
start_idx = 0
for idx in range(1, len(mgroup)):
    if mgroup[idx] != current_g:
        group_intervals.append((current_g, start_idx, idx-1))
        current_g = mgroup[idx]
        start_idx = idx
group_intervals.append((current_g, start_idx, len(mgroup)-1))

# 绘制热图
fig, ax = plt.subplots(figsize=(8, 6))
sns.heatmap(normal_data, center=0, ax=ax)
# 调整画布边距,预留色块位置
plt.subplots_adjust(left=0.15, bottom=0.15)
# 调整刻度边距,避免和色块重叠
ax.tick_params(axis='x', pad=15)
ax.tick_params(axis='y', pad=15)

# 绘制x轴下方的分组色块
for g, start, end in group_intervals:
    rect_width = end - start + 1
    # 位置参数:x起始、y起始、宽度、高度
    rect = patches.Rectangle((start, -0.6), rect_width, 0.4, color=group_color_map[g], lw=0)
    ax.add_patch(rect)

# 绘制y轴左侧的分组色块
for g, start, end in group_intervals:
    rect_height = end - start + 1
    rect = patches.Rectangle((-0.6, start), 0.4, rect_height, color=group_color_map[g], lw=0)
    ax.add_patch(rect)

plt.show()

自定义调整说明

  • 可修改group_color_map的色值更换分组颜色
  • 调整Rectangle的位置和宽高参数,可修改色块的大小和与热图的间距
  • 如果x轴和y轴的分组规则不同,单独定义y轴的分组数组和对应区间即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:57:00