Scipy 树状图中的标签排序

Label Ordering in Scipy Dendrogram

在python中,我有一个N乘N的距离矩阵dmat,其中dmat[i,j]编码实体i到实体j的距离。我想查看树状图。我做了:

from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pylab as plt

labels=[name of entity 1,2,3,...]

Z=linkage(dmat)
dn=dendrogram(Z,labels=labels)
plt.show()

但是标签顺序看起来不对。有些实体与 dmat 非常接近,但并未反映在树状图中。怎么回事?

linkage 的第一个参数必须是 condensed 格式的距离,或者是被聚类的点数组。如果传递正方形 (N x N) 距离矩阵,linkage 会将其解释为 N 维 space.

中的 N 个点

您可以使用 scipy.spatial.distance.squareform.

从方阵转换为压缩形式

将此添加到文件的开头

from scipy.spatial.distance import squareform

并替换这个

Z=linkage(dmat)

Z = linkage(squareform(dmat))