Pandas Seaborn:注释热图上缺少的值

Pandas Seaborn:注释热图上缺少的值,pandas,matplotlib,seaborn,heatmap,Pandas,Matplotlib,Seaborn,Heatmap,我正在用python用seaborn库绘制热图。数据帧包含一些缺少的值(NaN)。我希望与这些字段相对应的热图单元格是白色的(默认情况下),并用字符串NA进行注释。但是,如果我看得正确,注释不能处理缺少的值。这附近有黑客吗 我的代码: sns.heatmap( df, ax=ax[0, 0], cbar=False, annot=annot_df, fmt="", anno

我正在用python用
seaborn
库绘制热图。数据帧包含一些缺少的值(
NaN
)。我希望与这些字段相对应的热图单元格是白色的(默认情况下),并用字符串
NA
进行注释。但是,如果我看得正确,注释不能处理缺少的值。这附近有黑客吗

我的代码:

    sns.heatmap(
        df,
        ax=ax[0, 0],
        cbar=False,
        annot=annot_df,
        fmt="",
        annot_kws={"size": annot_size, "va": "center_baseline"},
        cmap="coolwarm",
        linewidth=0.5,
        linecolor="black",
        vmin=-max_value,
        vmax=max_value,
        xticklabels=True,
        yticklabels=True,
    )

一个想法是绘制另一个热图,使用透明的颜色,并且只有原始数据框为
NaN
的值。要控制轴标签,应最后绘制“真实”热图。请注意,
NaN
单元格的颜色是绘图的背景色

导入seaborn作为sns
将numpy作为np导入
作为pd进口熊猫
将matplotlib.pyplot作为plt导入
从matplotlib.colors导入ListedColormap
数据=np.其中(np.random.rand(7,10)<0.2,np.nan,np.random.rand(7,10)*2-1)
df=pd.DataFrame(数据)
annot_df=df.applymap(lambda f:f'{f:.1f}')
图,ax=plt.子批次(挤压=假)
热图(
其中(df.isna(),0,np.nan),
ax=ax[0,0],
cbar=False,
annot=np.full_like(df,“NA”,dtype=object),
fmt=“”,
annot_kws={“大小”:10,“va”:“中心基线”,“颜色”:“黑色”},
cmap=ListedColormap(['none']),
线宽=0)
热图(
df,
ax=ax[0,0],
cbar=False,
annot=annot_df,
fmt=“”,
annot_kws={“大小”:10,“va”:“中心基线”},
cmap=“coolwarm”,
线宽=0.5,
linecolor=“黑色”,
vmin=-1,
vmax=1,
xticklabels=真,
yticklabels=True)
plt.show()


注:可以使用显式着色
'NA'
单元格,例如
cmap=ListedColormap(['yellow'])

效果很好,谢谢!:)或者,也可以添加图案填充:
ax[0,0].pcolor(np.where(df.isna(),0,np.nan),hatch='xx',alpha=0)