如何从NetworkX最小生成树绘制树状图?

时间:2019-08-09 09:39:14

标签: python scipy networkx

我已经使用NetworkX从距离矩阵中计算了最小生成树。我现在要从中构建树状图。

我的MST: ![MST](http://www.bedside-ai.com/mst.png)

我尝试使用邻接矩阵(使用NetworkX的to_pandas_adjacency)

(T是我的MST)

df = nx.to_pandas_adjacency(T)

from scipy.spatial.distance import squareform
dist_array = squareform(df) #https://stackoverflow.com/questions/18952587/use-distance-matrix-in-scipy-cluster-hierarchy-linkage

plt.figure(figsize=(10,10)) 
mergings = linkage(dist_array, method='complete', metric='euclidean')
dendrogram(mergings, labels = distances.index, leaf_rotation=90, leaf_font_size=14)
plt.show()

现在,由于邻接矩阵用非边缘的0填充,我想链接计算欧几里得距离,最后得到3个聚类树状图(其中所有聚类的点都在0距离处),而我期望得到与原始MST相同的链接!

enter image description here

我尝试使用inf或大值作为to_pandas_adjacency的非边缘默认值,但最终得到无效的矩阵...

帮助任何人?我最好的猜测是我不应该理解和使用链接...

修改 我知道,反过来做(DT然后建立MST)可能会更容易,但是我需要重现操作顺序才能重新创建原始研究的结果...

编辑2 由于scipy的链接函数计算每个点(或此处的节点)之间的欧几里得距离,我想(但不确定)我需要找到一种方法来将邻接矩阵转换为类似于链接函数输出的数组,即加权边列表,但子类别的大小为第四列。

0 个答案:

没有答案