[英]Change the color for ytick labels in seaborn.clustermap
是否可以更改seaborn.clustermap中ytick标签的颜色?
因此,对于seaborn Iris示例 ,可以根据物种设置行颜色并绘制一个clustermap:
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)
并且可以在绘制的行和行标签之间获得1-1对应关系:
g.ax_heatmap.yaxis.get_majorticklabels()
无论如何使用它来重新着色基于row_colors的ytick标签?
在尝试做同样的事情时我发现了这个问题,在通过@tom进一步查看这个答案后 ,让我按照自定义标记标签。
您需要通过将刻度标签中的文本映射回颜色字典来指定每个单独刻度的颜色。
要访问每个tick,请转到g.ax_heatmap.axes.get_yticklabels()
,然后使用get_text()
提取tick的文本。
在Iris数据集的特定示例中,tick标签文本是pandas系列species
索引,用于收集species
文本,允许您从lut
字典中恢复颜色,您需要将索引转换回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轴刻度标签的颜色有一些“不匹配”(例如97和114),这是由于图形的大小。 使用figsize
增加大小可以让你发现隐藏的刻度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.