如何使用sns.heatmap的annot_kws参数自定义热力图注释内容
seaborn.heatmap 分离颜色映射与注释内容实现方法
核心逻辑是将控制颜色的矩阵、控制注释内容的矩阵分别传给heatmap的对应参数,annot_kws仅用于调整注释文字的显示样式,不负责传入注释内容:
data参数:传入用于决定颜色深浅的矩阵(比如典型场景下的z-score标准化矩阵)annot参数:传入用于在网格上显示内容的矩阵(比如典型场景下的原始数值矩阵),要求该矩阵与data传入的矩阵形状完全一致annot_kws参数:可选,传入字典控制注释文字的字号、粗细、颜色等样式
完整可运行代码示例
import numpy as np import seaborn as sns import matplotlib.pyplot as plt # 生成示例原始数据,实际使用时替换为自己的原始矩阵即可 np.random.seed(42) raw_data = np.random.randint(low=10, high=100, size=(5, 5)) # 计算z-score矩阵,作为颜色映射的依据 zscore_data = (raw_data - raw_data.mean()) / raw_data.std() # 绘制热力图 plt.figure(figsize=(8, 6)) sns.heatmap( data=zscore_data, # 传入控制颜色深浅的矩阵 annot=raw_data, # 传入要在网格上显示的注释内容矩阵 fmt="d", # 注释内容格式,整数用"d",浮点数保留两位小数用".2f" cmap="RdBu_r", center=0, annot_kws={ # 可选:调整注释文字的显示样式 "size": 12, "weight": "bold" } ) plt.tight_layout() plt.show()
常见注意事项
- 传入的颜色矩阵、注释矩阵必须行列数完全匹配,否则会触发维度不匹配报错
fmt参数需要和annot传入的矩阵数据类型对应:如果注释内容是提前处理好的字符串(比如带单位、显著性标记的内容),需要将fmt设为"s"- 如果需要自定义注释内容的格式(比如给超过阈值的数值加星号),可以提前构造对应格式的字符串矩阵,再传给
annot参数即可
内容的提问来源于stack exchange,提问作者jiating
相关产品推荐
相关产品推荐

