是否可以更改seaborn.clustermap中的ytick标签的颜色?
因此对于seaborn Iris example,可以根据物种设置行颜色并绘制群集图:
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标签?
答案 0 :(得分:3)
我在尝试做同样的事情时发现了这个问题,在通过@tom进一步查看this answer后,让我按照自定义标记标签。
您需要通过将刻度标签中的文本映射回颜色字典来为每个单独的刻度指定颜色。
要访问g.ax_heatmap.axes.get_yticklabels()
的每个标记,请使用get_text()
提取标记文本。
在Iris数据集的特定示例中,刻度标签文本是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
增加大小可以揭示隐藏的刻度。