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

如何处理Seaborn热力图长标签并添加标签-值映射图例

问题解决:Seaborn热力图长标签优化与缩写图例实现

问题背景

使用Seaborn绘制热力图时遇到长标签显示困境:

  • 调用ax.figure.tight_layout()时,轴标签出现严重重叠
  • 不调用该方法时,长标签会被画布边缘裁剪
    同时需要基于label_ind_by_names创建缩写图例,实现通过缩写快速查询完整长标签的需求。

解决方案

核心思路

  • 将热力图的轴标签替换为短缩写(如取长标签首字符),从根源避免标签重叠或裁剪问题
  • 手动创建自定义图例,建立缩写与完整长标签的对应关系
  • 调整画布布局,预留足够空间放置图例,确保所有元素完整显示

完整代码实现

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

n_classes = 10
confusion = np.random.randint(low=0, high=100, size=(n_classes, n_classes))

label_length = 20
label_ind_by_names = {
    "A"*label_length: 0,
    "B"*label_length: 1,
    "C"*label_length: 2,
    "D"*label_length: 3,
    "E"*label_length: 4,
    "F"*label_length: 5,
    "G"*label_length: 6,
    "H"*label_length: 7,
    "I"*label_length: 8,
    "J"*label_length: 9,
}

# 构建缩写与完整标签的映射
abbr_full_map = {key[0]: key for key in label_ind_by_names.keys()}
# 提取缩写列表作为热力图的轴标签
abbr_labels = list(abbr_full_map.keys())

# 生成带缩写标签的混淆矩阵DataFrame
df_cm = pd.DataFrame(
    confusion,
    index=abbr_labels,
    columns=abbr_labels
)

# 创建画布并设置合适尺寸
fig, ax = plt.subplots(figsize=(10, 8))
sns.set(font_scale=1.2)
# 绘制热力图
ax = sns.heatmap(df_cm, annot=True, annot_kws={"size": 16}, fmt='d', ax=ax)

# 创建自定义图例:用无填充色块作为图例标记
legend_elements = [Patch(facecolor='white', edgecolor='black', label=f"{abbr}: {full}") 
                   for abbr, full in abbr_full_map.items()]
# 将图例放置在热力图右侧,避免遮挡图表内容
ax.legend(handles=legend_elements, loc='upper left', bbox_to_anchor=(1.2, 1), title="标签对应关系")

# 调整布局,确保图例和图表都能完整显示
plt.subplots_adjust(right=0.8)
plt.show()

关键代码说明

  • 缩写映射:通过abbr_full_map提取长标签首字符作为缩写,建立缩写与完整标签的对应关系
  • 轴标签替换:将DataFrame的行、列标签替换为缩写,彻底解决长标签的显示问题
  • 自定义图例:利用matplotlib.patches.Patch创建无填充色块作为图例项,清晰展示缩写与完整标签的对应关系
  • 布局优化:通过figsize设置合适画布大小,subplots_adjust预留右侧空间放置图例,避免元素互相遮挡

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:36:19