更改 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 专家,但在我看来,需要对热图中的单个单元格进行孵化需要一些工作。简而言之,热图是matplotlib
Patch
es 的Collection
,一个集合的孵化只能在集合整体上设置。要设置单个单元格的孵化,您需要它们是不同的补丁,并且事情会变得一团糟。也许(希望)比我更有知识的人会说这是错误的,而且这很容易——但如果我不得不猜测,我会说更改文本样式比设置孵化更容易。
【讨论】:
这很有帮助,但如果我只想让每列底部方块中的文本加粗怎么办?以上是关于更改 seaborn 热图中的某些方块的主要内容,如果未能解决你的问题,请参考以下文章