用于网络中社区检测的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算法:通过逐渐从原始图中删除边来检测社区。该算法会删除“最有价值的”边缘,...
[@ItamarMushkin之后,我对@mdml的答案进行了一些细微修改,得到了我想要的。在高层次上,我将NetworkX的Girvan-Newman迭代器输出转换为另一个scipy.cluster.hierarchy.linkage
,我最终希望将其视为树状图。然后,我以边缘列表的形式构建dendrogram
,这是我输入到DiGraph()
的链接矩阵,其中包括每个齿状图合并的实际高度。
我必须对@mdml的答案进行两项修改: