Извлечь дендрограмму из кластерной карты морского побережья - PullRequest
0 голосов
/ 21 октября 2018

Учитывая следующий пример, который взят из: https://python -graph-gallery.com / 404-dendrogram-with-heat-map /

Он генерирует дендрограмму, где я предполагаючто это основано на скупой.

# Libraries
import seaborn as sns
import pandas as pd
from matplotlib import pyplot as plt

# Data set
url = 'https://python-graph-gallery.com/wp-content/uploads/mtcars.csv'
df = pd.read_csv(url)
df = df.set_index('model')
del df.index.name
df

# Default plot
sns.clustermap(df)

Вопрос: Как получить дендрограмму в неграфической форме?

Справочная информация: Из корня этой дендрограммы я хочу вырезать ее как можно большей длины.Например, у нас есть одно ребро от корня до левого кластера (L) и ребро до правого кластера (R) ... из тех двух, которые я хотел бы получить по длине ребер и вырезать всю дендрограмму на самом длинном изэти два ребра.

С уважением

1 Ответ

0 голосов
/ 21 октября 2018

clustermap возвращает дескриптор объекта ClusterGrid, который включает дочерние объекты для каждой дендрограммы, h.dendrogram_col и h.dendrogram_row.Внутри них находятся сами дендрограммы, которые предоставляют геометрию дендрограммы согласно возвращаемым данным scipy.hierarchical.dendrogram, из которых можно вычислить длины конкретной ветви.

h = sns.clustermap(df)
dgram = h.dendrogram_col.dendrogram
D = np.array(dgram['dcoord'])
I = np.array(dgram['icoord'])

# then the root node will be the last entry, and the length of the L/R branches will be
yy = D[-1] 
lenL = yy[1]-yy[0]
lenR = yy[2]-yy[3]

Матрица связи, входные данныеиспользуется для вычисления дендрограммы, также может помочь:

h.dendrogram_col.linkage
h.dendrogram_row.linkage
...