Scipy树状图叶节点排序

时间:2018-06-28 07:38:01

标签: python scipy

我试图在Scipy dendrogram绘图函数中更改叶节点的顺序。请考虑以下代码段:

from scipy.cluster.hierarchy import linkage, dendrogram
import matplotlib.pyplot as plt
dists = [ 2., 10.,  3.]
lx = linkage(dists, 'complete')
dendrogram(lx)
plt.show()

结果树状图为:

Dendrogram plot

在此图中,我想将叶节点的顺序更改为0, 1, 2。有一个简单的方法可以做到这一点吗?

我尝试了count_sort中参数distance_sortdendrogram的所有可能的设置,但是顺序保持不变。

2 个答案:

答案 0 :(得分:2)

以下评论出现在source code of the dendrogram scipy method中:

# This feature was thought about but never implemented (still useful?):
#
#         ... = dendrogram(..., leaves_order=None)
#
#         Plots the leaves in the order specified by a vector of
#         original observation indices. If the vector contains duplicates
#         or results in a crossing, an exception will be thrown. Passing
#         None orders leaf nodes based on the order they appear in the
#         pre-order traversal.

这是一个相关的问题。您可以与Scipy开发人员(SciPy Project Mailing Lists)联系,以表达您对此增强功能的兴趣,以便他们意识到该功能将是有用的,并为其赋予了更高的优先级。

答案 1 :(得分:0)

我认为这不可能。 count_sortdistance_sort选项仅适用于后代节点。

想象一下您的示例将标签1和2切换了。在这种情况下,不可能按顺序排列节点,因为必须在成对的节点0和1之间强制节点1。这表明对所有节点进行排序的任何过程都是不可缩放的。