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

Seaborn子图热力图布局错位及色条标签位置调整求助

解决热力图对齐与色条标签布局问题

问题背景

现有两个DataFrame:

df1 = pd.DataFrame(np.random.randint(0,50,size=(5,5)), columns=list('ABCDE'))
df2 = pd.DataFrame(np.random.randint(0,50,size=(5,5)), columns=list('FGHIJ'))

需求为:

  1. 并排绘制两个热力图,共用一个色条(数据范围一致)
  2. 将共用色条缩小至原尺寸的一半
  3. 色条标签移至色条右侧
  4. 解决当前代码中两个热力图不在同一水平高度的对齐问题

原代码存在布局偏移,且色条标签位置不符合要求。

修正方案

通过手动指定色条轴、使用网格布局来解决对齐问题,同时调整色条标签位置:

完整代码

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

# 创建数据
df1 = pd.DataFrame(np.random.randint(0,50,size=(5,5)), columns=list('ABCDE'))
df2 = pd.DataFrame(np.random.randint(0,50,size=(5,5)), columns=list('FGHIJ'))

# 创建画布与网格布局,预留色条区域
fig = plt.figure(figsize=(7, 5))
# 2行2列网格:第一行两个热力图,第二行跨列放色条
gs = fig.add_gridspec(2, 2, height_ratios=[10, 1], width_ratios=[1, 1], hspace=0.1)

# 初始化热力图轴与色条轴
ax1 = fig.add_subplot(gs[0, 0])
ax2 = fig.add_subplot(gs[0, 1])
cbar_ax = fig.add_subplot(gs[1, :])

# 绘制第一个热力图,指定共用色条轴
sns.heatmap(df1, square=True, vmax=50, vmin=0,
            cmap=sns.color_palette("viridis", as_cmap=True),
            cbar=True, cbar_ax=cbar_ax,
            cbar_kws={'orientation': 'horizontal', 'shrink': 0.5},
            ax=ax1)

# 绘制第二个热力图,关闭独立色条
sns.heatmap(df2, square=True, vmax=50, vmin=0,
            cmap=sns.color_palette("viridis", as_cmap=True),
            cbar=False, ax=ax2)

# 调整色条标签到右侧
cbar = cbar_ax.collections[0].colorbar
cbar.set_label('Scale', labelpad=15, rotation=0)
cbar.ax.yaxis.set_label_position('right')

plt.tight_layout()
plt.show()

关键调整说明

  • 布局对齐:使用gridspec划分固定网格,将两个热力图放在同一行的不同列,色条单独占一行并跨两列,避免了原代码中因第一个热力图自带色条导致的轴偏移问题,确保两个热力图水平对齐。
  • 色条设置:通过cbar_ax指定共用色条的位置,用shrink=0.5将色条缩小至原尺寸的一半。
  • 标签位置调整:将色条标签旋转为水平(rotation=0),并设置yaxis.set_label_position('right')把标签移到色条右侧,labelpad调整标签与色条的间距。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 15:50:23