Я создаю кластерную карту со следующим кодом.
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)
Это работает и дает такой вывод:
Я мог бы добавить метки, соответствующие каждой ячейке, но я также хочу пометить каждый кластер уникальными сетевыми именами, как здесь:
Есть идеи, как этого добиться?