如何给sns clustermap中的聚类分组打标签

3
我正在使用以下代码创建集群地图。
import numpy as np
import pandas as pd
import seaborn as sns

all_net_names  = ['early_vis', 'face', 'motion', 'scene', 'scene', 'scene', 
                  'dmn', 'dmn', 'dmn', 'dmn', 'dmn', 'dmn', 'reward', 'reward',
                  'reward', 'reward', 'reward', 'ofc', 'ofc', 'ofc', 'ofc']

roi_names = ['E', 'F', 'M', 'S1', 'S2', 'S3', 'D1', 'D2', 'D3', 'D4', 'D5',
             'D6', 'R1', 'R2', 'R3', 'R4', 'R5','O1', 'O2', 'O3', 'O4']

n_roi = len(roi_names)
M = np.random.rand(n_roi, n_roi) # array to plot

net_ind = sorted(np.unique(all_net_names, return_index=True)[1])
net_names = [all_net_names[index] for index in sorted(net_ind)]
network_pal = sns.husl_palette(len(net_names), s=.45)
network_lut = dict(zip(map(str, np.unique(all_net_names)), network_pal))
network_colors = pd.Series(all_net_names).map(network_lut)
network_colors = np.asarray(network_colors)

g = sns.clustermap(M, center=0, cmap="vlag",
                   row_cluster=False, 
                   col_cluster=False,
                   row_colors=network_colors, 
                   col_colors=network_colors,
                   linewidths=0, figsize=(10, 10))

g.ax_heatmap.set_xticklabels(roi_names, rotation=90)
g.ax_heatmap.set_yticklabels(roi_names, rotation=0)

它可以工作并输出以下内容:

clustermap1

我可以添加与每个单元格对应的标签,但我还想使用唯一的网络名称标记每个群集,如这里所示: modified cluster map

有什么想法可以实现吗?


这是代码中的一个错误。我使用了旧名称作为“all_net_names”。感谢您指出。 - Ilkay Isik
1个回答

6
也许将此代码添加到结尾?
g.ax_row_colors.set_yticks(0.5 * (np.array(net_ind) + np.array(net_ind[1:] + [len(all_net_names)])))
g.ax_row_colors.set_yticklabels(net_names)
g.ax_row_colors.yaxis.set_tick_params(size=0) # make tick marks invisible

每个组的起始位置由net_ind给出。为了使标签居中,它们应该放置在它们的起始位置和下一个标签的起始位置的中间。由于最后一组没有下一个标签,我们将all_net_names的长度作为最后一组的结束位置。

example clustermap

同样的方法也可以用于列:

g.ax_col_colors.set_xticks(0.5 * (np.array(net_ind) + np.array(net_ind[1:] + [len(all_net_names)])))
g.ax_col_colors.set_xticklabels(net_names, rotation=90)
g.ax_col_colors.xaxis.set_tick_params(size=0) # make tick marks invisible
g.ax_col_colors.xaxis.tick_top()

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