从seaborn簇图中提取树状图

时间:2018-10-21 13:45:37

标签: python scipy seaborn dendrogram

给出以下示例,该示例来自:https://python-graph-gallery.com/404-dendrogram-with-heat-map/

它会生成树状图,我认为它是基于scipy的。

# 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 :(得分:3)

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