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

如何为Seaborn热力图中的正负值设置不同字号?

修复Seaborn热力图正负值不同字号的问题

你的问题出在两次调用sns.heatmap叠加绘制,导致颜色层叠、注释重叠,最终显示异常。以下是正确的实现方式:

修正思路

先绘制完整的热力图(包含正确的颜色映射),再手动遍历每个单元格,根据对应数值的正负,设置不同字号添加注释文本。

完整代码

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

# 统一数据定义(去掉重复的data赋值)
data = {0: [0.000000, 0.000000], 1: [2.31049, 0.000000], 2: [-0.231049, 0.000000]}
df = pd.DataFrame.from_dict(data, orient='index')

# 第一步:绘制基础热力图,不添加自动注释
ax = sns.heatmap(
    df, cmap='bwr', vmax=10, vmin=-10, annot=False,  # 关闭自动注释
    linewidths=0.25, center=0, square=True
)

# 第二步:手动添加注释,根据数值正负设置不同字号
for i in range(df.shape[0]):
    for j in range(df.shape[1]):
        value = df.iloc[i, j]
        # 根据值的正负选择字号
        fontsize = 16 if value > 0 else 6
        # 在单元格中心添加文本
        ax.text(
            j + 0.5, i + 0.5, f'{value:.6f}',  # 保留6位小数,和原fmt='f'一致
            ha='center', va='center', fontsize=fontsize
        )

plt.show()

关键说明

  • 先绘制不带自动注释的热力图,确保颜色映射正确(vmax=10, vmin=-10覆盖所有数值范围)
  • 通过双层循环遍历DataFrame的每个单元格,获取对应值后判断正负,设置不同字号
  • 使用ax.text()在单元格中心添加文本,ha='center'和va='center'确保文本居中对齐

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:25:41