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

Seaborn 10.1热图非对角单元格注释格式设置问题

解决Seaborn热图注释格式化不全的问题

我来帮你搞定这个Seaborn热图注释格式化的问题!在Seaborn 0.10.1版本中,fmt='.2g'看似只对对角单元格生效,其实是因为非对角的数值较小,g格式会自动切换显示方式(比如科学计数法或简化小数位),导致不符合你的预期。直接依赖fmt参数没法完全自定义显示效果,这时候我们可以手动生成注释文本,完全控制每个单元格的显示内容。

方法1:按.2g格式自定义注释(匹配你的需求)

通过生成和数据同形状的字符串数组,逐个格式化数值,再传给heatmap的annot参数,同时设置fmt=''让Seaborn不再自动处理注释:

import seaborn as sn
import numpy as np
import matplotlib.pyplot as plt

# 原始数据
x = np.array([[0.99082, 0.00102, 0.0, 0.0], 
              [0.0, 0.98767, 0.00529, 0.00088], 
              [0.01744, 0.00097, 0.94961, 0.00291], 
              [0.00990, 0.00099, 0.00594, 0.94356]])

# 生成自定义注释:用.2g格式化,将"0.0"替换为"0"
annotations = np.array([[f'{val:.2g}' for val in row] for row in x])
annotations[annotations == '0.0'] = '0'

# 绘制热图,传入自定义注释,fmt设为空字符串
sn.heatmap(x, annot=annotations, fmt='', cmap=plt.cm.Blues)
plt.show()

方法2:如果需要两位小数四舍五入

如果你实际想要的是两位小数四舍五入(比如0.01744→0.02,0.0099→0.01),可以调整格式化规则:

# 生成两位小数注释,将"0.00"替换为"0"
annotations = np.array([[f'{val:.2f}' for val in row] for row in x])
annotations[annotations == '0.00'] = '0'

sn.heatmap(x, annot=annotations, fmt='', cmap=plt.cm.Blues)
plt.show()

这种方法的核心是:当你传入自定义的字符串数组作为annot时,fmt=''会告诉Seaborn直接使用你提供的文本,不再进行额外格式化,确保每个单元格的注释都完全符合你的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 20:03:10