更改 seaborn 热图中的某些方块

Posted

技术标签:

【中文标题】更改 seaborn 热图中的某些方块【英文标题】:change certain squares in a seaborn heatmap 【发布时间】:2015-10-20 19:44:36 【问题描述】:

假设我有一个看起来像这样的热图(轴被修剪掉):

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

对此有什么想法吗?谢谢!

【问题讨论】:

【参考方案1】:

您可以绘制两次,第二次对不想强调的单元格应用蒙版:

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")

【讨论】:

【参考方案2】:

一种方法是直接访问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')

我不是 matplotlib/seaborn 专家,但在我看来,需要对热图中的单个单元格进行孵化需要一些工作。简而言之,热图是matplotlibPatches 的Collection,一个集合的孵化只能在集合整体上设置。要设置单个单元格的孵化,您需要它们是不同的补丁,并且事情会变得一团糟。也许(希望)比我更有知识的人会说这是错误的,而且这很容易——但如果我不得不猜测,我会说更改文本样式比设置孵化更容易。

【讨论】:

这很有帮助,但如果我只想让每列底部方块中的文本加粗怎么办?

以上是关于更改 seaborn 热图中的某些方块的主要内容,如果未能解决你的问题,请参考以下文章

更改seaborn热图的轴标签[重复]

更改 Seaborn 热图中刻度标签的旋转

使用 python seaborn 仅在某些值之间设置热图相关性

Seaborn 热图更改 yticks 的日期频率

Seaborn 热图相关性不适合注释数字

根据 Seaborn 中的散点图绘制热图