r-在iGraph中绘制社区



我想重现本文第6页中的那种"社区摘要"图:http://arxiv.org/pdf/0803.0476v2.pdf

首先在图上使用社区算法,例如:

wc <- walktrap.community(subgraph)
mc <- multilevel.community(subgraph)

然后根据社区对顶点进行分组。社区节点的大小是成员大小的函数,而边缘宽度是从社区a的任何成员到社区B的总边缘的函数。

请注意我不只是想像这样将社区编码为彩色或凸包

V(inSubGraph)$color <- commObj$membership+1
plot.igraph( inSubGraph, vertex.color = V(inSubGraph)$color)

或带有凸包:

plot(commObj, inSubGraph) 

contract.vertices函数与社区检测方法提供的成员向量一起使用,然后使用simplify。特别是:

  1. 为每个顶点指定一个值为1的数字顶点属性,如下所示:V(g)$size = 1

  2. 为每条边指定一个值为1的数字边属性,如下所示:E(g)$count = 1

  3. 将社区收缩为顶点,如下所示:comm.graph <- contract.vertices(g, wc$membership, vertex.attr.comb=list(size="sum", "ignore"));基本上,这指定了应该对正在收缩的顶点的size属性求和,并且应该忽略每一个其他顶点属性。(详见R中的?attribute.combination)。此调用收缩顶点,但保留原始边,因此现在顶点之间的边数与社区之间的原始图中的边数一样多。

  4. 按如下方式折叠多条边:comm.graph <- simplify(comm.graph, remove.loops=FALSE, edge.attr.comb=list(count="sum", "ignore"))

现在有一个名为comm.graph的图,其中顶点表示原始图的社区,size顶点属性对应于原始图中每个社区中的顶点数,count边属性对应于初始图中社区之间的边数。

最新更新