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

如何用Seaborn绘制带彩色线条副坐标轴的热力图

给Seaborn Heatmap添加彩色轴线条

要实现你要的效果,核心是利用Matplotlib的自定义轴绘制和主刻度对齐的彩色条,下面是具体实现代码和说明:

首先准备基础热力图数据,以及每个类别对应的颜色数值(可替换为你的实际数据):

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from matplotlib.colors import Normalize

# 基础数据
vals = np.array(['A','B','C','D'])
corrs = np.array([[0, 1, 0.5, 3],[1,0,2,0],[0.5, 2,0, 3],[3,0,3,0]])

# 模拟每个类别对应的颜色数值(替换成你的实际数据)
color_x = np.array([0.1, 0.6, 0.3, 0.9])
color_y = np.array([0.4, 0.7, 0.2, 0.8])

# 配置配色和归一化(确保颜色值映射到正确色域)
cmap = plt.cm.viridis
norm_x = Normalize(vmin=color_x.min(), vmax=color_x.max())
norm_y = Normalize(vmin=color_y.min(), vmax=color_y.max())

接下来绘制基础热力图,并创建副轴添加彩色线条:

# 创建画布和主轴
fig, ax = plt.subplots(figsize=(7, 7))
sns.heatmap(corrs, xticklabels=vals, yticklabels=vals, ax=ax, cmap='coolwarm')

# --- 添加X轴下方的彩色条 ---
# 副轴位置参数:[左偏移, 底部偏移, 宽度, 高度],基于主轴位置调整
ax_x = fig.add_axes([ax.get_position().x0, ax.get_position().y0 - 0.06, 
                     ax.get_position().width, 0.03])
ax_x.set_xticks([])
ax_x.set_yticks([])

# 为每个刻度绘制彩色块,和热力图单元格对齐
for idx in range(len(vals)):
    rect = plt.Rectangle((idx, 0), 1, 1, color=cmap(norm_x(color_x[idx])))
    ax_x.add_patch(rect)
ax_x.set_xlim(ax.get_xlim())  # 对齐主轴X范围

# --- 添加Y轴右侧的彩色条 ---
ax_y = fig.add_axes([ax.get_position().x1 + 0.03, ax.get_position().y0, 
                     0.03, ax.get_position().height])
ax_y.set_xticks([])
ax_y.set_yticks([])

for idx in range(len(vals)):
    rect = plt.Rectangle((0, idx), 1, 1, color=cmap(norm_y(color_y[idx])))
    ax_y.add_patch(rect)
ax_y.set_ylim(ax.get_ylim())  # 对齐主轴Y范围

# 可选:添加彩色条的颜色标尺
sm_x = cm.ScalarMappable(cmap=cmap, norm=norm_x)
sm_x.set_array([])
fig.colorbar(sm_x, ax=ax_x, orientation='horizontal', pad=0.1)

sm_y = cm.ScalarMappable(cmap=cmap, norm=norm_y)
sm_y.set_array([])
fig.colorbar(sm_y, ax=ax_y, orientation='vertical', pad=0.1)

plt.show()

关键说明:

  • 副轴位置通过add_axes()手动指定,基于主轴位置计算,确保和热力图精准对齐;
  • 彩色块的位置对应热力图每个单元格,通过循环逐个绘制;
  • Normalize可将任意范围的颜色数值映射到配色方案的完整色域,避免颜色失真;
  • 不需要颜色标尺的话,可删除最后几行colorbar相关代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:23:27