Можно получить доступ к индексам переупорядоченных столбцов / строк из кластерной карты seaborn, используя:
> print(f'rows: {heatmap_sns.dendrogram_row.reordered_ind}')
> print(f'columns: {heatmap_sns.dendrogram_col.reordered_ind}')
rows: [5, 0, 13, 2, 18, 7, 4, 16, 12, 19, 14, 15, 10, 3, 8, 6, 17, 11, 1, 9]
columns: [7, 1, 10, 5, 9, 0, 8, 13, 2, 6, 14, 3, 4, 11, 12]
Чтобы обновить порядок строк / столбцов исходного кадра данных:
# get col and row names by ID
colname_list = [df.columns[col_id] for col_id in heatmap_sns.dendrogram_col.reordered_ind]
rowname_list = [df.index[row_id] for row_id in heatmap_sns.dendrogram_row.reordered_ind]
# update dataframe
df_ro = df.reindex(rowname_list)
df_ro = df_ro[colname_list]
Я сделал это здесь, сначала получив имена, возможно, есть даже прямой способ обновить столбцы / строки по индексам.
hv.HeatMap({'x': df_ro.columns, 'y': df_ro.index, 'z': df_ro},
kdims=[('x', 'Col Categories'), ('y', 'Row Categories')],
vdims='z').opts(cmap="viridis", width=520, height=520)
Поскольку я использовал случайные данные, в категориях есть небольшой порядок, новсе же картина выглядит чуть менее шумной.Обратите внимание на то, что ось holoviews / df y является просто обратной по сравнению с матрицей-матрицей морского происхождения, поэтому графика выглядит перевернутой.