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
相关产品推荐
相关产品推荐

