我试图在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()
结果树状图为:
在此图中,我想将叶节点的顺序更改为0, 1, 2
。有一个简单的方法可以做到这一点吗?
我尝试了count_sort
中参数distance_sort
和dendrogram
的所有可能的设置,但是顺序保持不变。
答案 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_sort
和distance_sort
选项仅适用于后代节点。
想象一下您的示例将标签1和2切换了。在这种情况下,不可能按顺序排列节点,因为必须在成对的节点0和1之间强制节点1。这表明对所有节点进行排序的任何过程都是不可缩放的。