在seaborn.clustermap中更改ytick标签的颜色

9

在 seaborn.clustermap 中,是否可以更改 ytick 标签的颜色?

因此,在 seaborn 鸢尾花示例 中,可以根据物种设置行颜色并绘制聚类图:

import seaborn as sns
iris = sns.load_dataset("iris")
species = iris.pop("species")
lut = dict(zip(species.unique(), "rbg"))
row_colors = species.map(lut)
g = sns.clustermap(iris)

可以在绘制的行和行标签之间建立一对一的对应关系:

g.ax_heatmap.yaxis.get_majorticklabels()

有没有办法利用这个功能根据行颜色重新着色ytick标签?

1个回答

10

在尝试相同操作时,我发现了这个问题,进一步查看了@tom的答案,使我能够自定义刻度标签。

需要通过将刻度标签中的文本映射回颜色字典来为每个单独的刻度指定颜色。

要访问每个刻度,请使用g.ax_heatmap.axes.get_yticklabels(),然后使用get_text()提取刻度的文本。

在Iris数据集的特定示例中,刻度标签文本是pandas系列species的索引,为了收集允许您从lut字典中恢复颜色的species文本,您需要将索引转换回一个int并使用.loc来提取所需的信息。

iris = sns.load_dataset("iris")
species = iris.pop("species")
lut = dict(zip(species.unique(), "rbg"))
row_colors = species.map(lut)
g = sns.clustermap(iris, row_colors=row_colors)

for tick_label in g.ax_heatmap.axes.get_yticklabels():
    tick_text = tick_label.get_text()
    species_name = species.loc[int(tick_text)]
    tick_label.set_color(lut[species_name])

带有彩色 Y 轴刻度线的 Iris 数据集聚类图

您会注意到,树状图和 Y 轴刻度标签之间存在一些“不匹配”(例如 97 和 114),这是由于图形的大小。使用 figsize 增加图形大小可以揭示隐藏的刻度线。

输入图像说明


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接