Seaborn Clustermap переупорядочить строки - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь переупорядочить кластерную карту морского происхождения, используя порядок строк предыдущей кластерной карты, таким образом:

p = sns.clustermap(m1, cmap='RdBu_r', linewidths=0.5)
order = p.dendrogram_row.reordered_ind
ind = m2.index[order]
m2 = m2.reindex(ind)
sns.clustermap(m2, cmap='RdBu_r', linewidths=0.5)

М2 сортируется правильно, когда я печатаю его, но когда я помещаю его вкластерная карта тепловая карта не отсортирована, не могли бы вы мне помочь?

1 Ответ

0 голосов
/ 15 января 2019

Я думаю, что clustermap строится в соответствии с кластеризацией, независимо от того, в каком порядке вы проходите. Это может быть решением для создания пользовательской матрицы расстояний и последующей передачи ее в качестве связующего звена.Если вы получили метки кластера из предыдущей кластеризации, просто создайте матрицу расстояний, где расстояние равно нулю, если два элемента находятся в одном кластере.

import pandas as pd
import seaborn as sns
import numpy as np
from scipy.cluster.hierarchy import linkage
import scipy.spatial.distance as ssd

# create some random 3 dimensional data
data = pd.DataFrame(index=range(10), columns=["x", "y", "z"], 
data=np.random.random(size=(10,3)))

# create some random clustering with 3 different labels
cl_labels = [0,1,2]
cluster_labels = np.random.choice(cl_labels, size=data.shape[0])
prepared_clustering = pd.Series(index=data.index, data=cluster_labels)

# create a "distance" matrix
# distance for items in the same cluster will be zero, distance to elements outside the cluster are arbitrary (non-zero)
d = np.array([cluster_labels]*10)
distance_matrix = pd.DataFrame(index=data.index, columns=data.index, data = (d != d.T)).astype(int)

# create some colors to illustrate the clustering
colors = dict(zip(cl_labels, sns.hls_palette(len(cl_labels), l=0.5, s=0.8)))
row_colors = prepared_clustering.map(colors)

# plotting the clustermap
sns.clustermap(data,
           col_cluster=False,
           # don't turn off row_clustering, because it will do some default clustering/ordering
           row_cluster=True,
           # set the row_linkage to a custom linkage generated from the distance matrix
           # have no clue, but without the ssd.squareform a warning is displayed. the result is the same anyway
           #row_linkage=linkage(distance_matrix),
           row_linkage=linkage(ssd.squareform(distance_matrix)),
           # decorate with the rows
           row_colors=row_colors
          )

Карта кластеров с предопределенными кластерами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...