改变seaborn热图中的某些方块

drg*_*drg 12 python matplotlib heatmap pandas seaborn

假设我有一个看起来像这样的热图(轴被修剪掉): 在此输入图像描述

我希望能够改变某些方块以表示统计显着性.我知道我可以掩盖不具有统计意义的方块,但我仍然希望保留该信息(而不是将值设置为零).执行此操作的选项包括1)使某些正方形上的文本变粗,2)添加类似阴影的功能,以便某些正方形具有点画,或3)向某些正方形添加符号.

有什么想法吗?谢谢!

jme*_*jme 11

一种方法是Text直接访问对象并改变其重量/样式.下面的代码将采用一些示例数据并尝试使每个条目等于118突出:

flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
ax = sns.heatmap(flights, annot=True, fmt="d")

for text in ax.texts:
    text.set_size(14)
    if text.get_text() == '118':
        text.set_size(18)
        text.set_weight('bold')
        text.set_style('italic')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我不是matplotlib/seaborn专家,但在我看来,要求热图中的单个单元格被孵化需要一些工作.总之,热图是Collectionmatplotlib PatchES和集合的孵化只能在集合作为一个整体进行设置.要设置单个单元格的填充,您需要它们是不同的补丁,并且事情变得混乱.也许(希望)有些人比我更了解并且说这是错误的,而且这很容易 - 但如果我不得不猜测,我会说改变文字风格比设置舱口更容易.


mwa*_*kom 11

您可以绘制两次,将掩码应用于您不希望第二次强调的单元格:

import numpy as np
import seaborn as sns
x = np.random.randn(10, 10)
sns.heatmap(x, annot=True)
sns.heatmap(x, mask=x < 1, cbar=False,
            annot=True, annot_kws={"weight": "bold"})
Run Code Online (Sandbox Code Playgroud)