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

seaborn.heatmap传字符串标注报错,如何仅标注热图部分行列?

错误产生原因

seaborn heatmap 函数的 fmt 参数默认值为 'g',该格式符仅适用于数值类型的标注格式化。当你向 annot 参数传入字符串数组时,程序尝试用数值格式符处理字符串对象,就会触发该类型不匹配的报错。

实现仅标注热图指定行列的方案

只要把 fmt 参数显式设置为适配字符串的 's' 即可,完整的实现逻辑如下:

  • 构造与热图输入数据集形状完全一致的标注数组,需要显示标注的位置填入对应字符串/数值转成的字符串,不需要显示的位置填入空字符串 ''
  • 调用 heatmap 时同时传入自定义的标注数组,以及 fmt='s' 参数

示例代码如下:

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

# 生成测试数据
data = np.random.rand(5, 5)

# 构造标注数组:仅标注第1行和第3列(索引从0开始)
annot = np.full(data.shape, '', dtype=str)
# 标注第1行所有列
annot[1, :] = data[1, :].round(2).astype(str)
# 标注第3列所有行
annot[:, 3] = data[:, 3].round(2).astype(str)

# 绘制热图,fmt设为字符串格式
sns.heatmap(data, annot=annot, fmt='s')
plt.show()

可选优化方案:如果不想手动处理字符串转换,也可以直接构造数值类型的标注数组,不需要显示标注的位置填np.nan,调用函数时新增参数annot_kws={"na": ""}即可,示例如下:

annot = np.full(data.shape, np.nan)
annot[1, :] = data[1, :]
annot[:, 3] = data[:, 3]
sns.heatmap(data, annot=annot, fmt='.2f', annot_kws={"na": ""})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:06:03