首页 > 解决方案 > 向热图中的特定单元格添加注释

问题描述

我正在绘制一个 seaborn 热图,并且只想用自定义文本注释特定的单元格。

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

data = StringIO(u'''75,83,41,47,19
                    51,24,100,0,58
                    12,94,63,91,7
                    34,13,86,41,77''')

labels = StringIO(u'''7,8,4,,1
                    5,2,,2,8
                    1,,6,,7
                    3,1,,4,7''')

data = pd.read_csv(data, header=None)
data = data.apply(pd.to_numeric)

labels = pd.read_csv(labels, header=None)
#labels = np.ma.masked_invalid(labels)

fig, ax = plt.subplots()
sns.heatmap(data, annot=labels, ax=ax, vmin=0, vmax=100)
plt.show()

上面的代码生成以下热图:

具有 nan 值的热图

注释行生成以下热图:

0 值的热图

我只想在单元格上显示非 nan(或非零)文本。怎样才能做到这一点?

标签: pythonpandasnumpymatplotlibseaborn

解决方案


为了补充@mrzo的答案,您可以使用na_filter=Falseinread_csv()nans 存储为空字符串,并使用它就pandas.DataFrame.astype()地转换为字符串:

# ...
labels = pd.read_csv(labels, header=None, na_filter=False).astype(str)
sns.heatmap(data, annot=labels, fmt='s', ax=ax, vmin=0, vmax=100)

推荐阅读