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

如何将Seaborn heatmap最后一行和最右列设为白并保留数值与索引

Seaborn热图指定单元格设为白色且保留标注的解决方案

不要用mask参数实现该需求,mask的设计逻辑就是同时隐藏对应位置的色块和标注,不符合你的使用场景。你可以在热图绘制完成后,直接修改指定位置单元格的背景色,完全不影响标注、行/列索引的正常显示。

实现代码

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

np.random.seed(2021)
df = pd.DataFrame(np.random.normal(0, 1, (6, 4)))
df = df.rename(columns = {0:"a", 1:"b", 2:"c", 3:"d"})
df.index = [value for key, value in {0:"a", 1:"b", 2:"c", 3:"d", 4:"e", 5:"f"}.items()]

# 正常绘制热图,接收返回的Axes对象
ax = sns.heatmap(df, annot = True)
n_rows, n_cols = df.shape

# 遍历修改最后一行、最右列的单元格背景色
for row_idx in range(n_rows):
    for col_idx in range(n_cols):
        # 匹配最后一行 或 最右列的单元格
        if row_idx == n_rows - 1 or col_idx == n_cols - 1:
            # 按顺序定位对应单元格的色块,修改背景为白色
            ax.patches[row_idx * n_cols + col_idx].set_facecolor('white')

plt.show()

原理解释

  • sns.heatmap返回的Axes对象的patches属性存储了所有单元格的色块对象,排列规则为从上到下逐行排列、每行内从左到右排列,可以通过行号、列号直接计算对应色块的索引
  • 仅修改色块的facecolor属性,不会影响已经渲染完成的数值标注、行/列文本索引
  • 代码适配任意大小的DataFrame,不需要硬编码行/列数量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:24:03