绘制通过NetworkX Girvan-Newman算法发现的社区树状图

问题描述 投票:2回答:1

用于网络中社区检测的Girvan-Newman算法:

通过逐渐从原始边缘去除边缘来检测社区图形。传统上,该算法去除了“最有价值”的边缘在每个步骤中具有最高中间性中心的边缘。作为图分解成紧密的社区结构是暴露,结果可以描述为树状图。

在NetworkX中,实现返回一组元组上的迭代器。第一个元组是由2个社区组成的第一个元组,第二个元组是由3个社区组成的第二个元组,依此类推,直到最后一个元组具有n个独立节点(树状图的叶子)的n个集合。

import networkx as nx

G = nx.path_graph(10)
comp = nx.community.girvan_newman(G)
list(comp)

[({{0,1,2,3,4},{5,6,7,8,9}),({0,1},{2,3,4},{5,6,7 ,89}),({0,1},{2、3、4},{5、6},{8、9、7}),({0、1},{2},{3、4} ,{5,6},{8、9、7}),({0、1},{2},{3、4},{5、6},{7},{8、9}),({0} ,{1},{2},{3、4},{5、6},{7},{8、9}),({0},{1},{2},{3},{4},{5 ,6},{7},{8、9}),({0},{1},{2},{3},{4},{5},{6},{7},{8、9}) ,({0},{1},{2},{3},{4},{5},{6},{7},{8},{9})]

问题是:如何绘制树状图?

我看过scipy.cluster.hierarchy.dendrogram,但是它期望我猜到的是一个“链接矩阵”,例如scipy.cluster.hierarchy.dendrogram创建的那个,但是我不确定如何将这个元组列表转换为这个“链接”矩阵”。

所以,我问在有/没有SciPy的scipy.cluster.hierarchy.linkage的情况下如何绘制此树状图。

用于网络中社区检测的Girvan-Newman算法:通过逐渐从原始图中删除边来检测社区。该算法会删除“最有价值的”边缘,...

python matplotlib scipy networkx dendrogram
1个回答
1
投票

[@ItamarMushkin之后,我对@mdml的答案进行了一些细微修改,得到了我想要的。在高层次上,我将NetworkX的Girvan-Newman迭代器输出转换为另一个scipy.cluster.hierarchy.linkage,我最终希望将其视为树状图。然后,我以边缘列表的形式构建dendrogram,这是我输入到DiGraph()的链接矩阵,其中包括每个齿状图合并的实际高度。

我必须对@mdml的答案进行两项修改:

© www.soinside.com 2019 - 2024. All rights reserved.