在iGraph中绘制社区

时间:2013-12-29 19:48:01

标签: 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) 

1 个答案:

答案 0 :(得分:4)

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"))

  5. 您现在有一个名为comm.graph的图表,其中顶点代表原始图表的社区,size顶点属性对应于原始图表中每个社区中的顶点数量,以及{ {1}} edge属性对应于原始图中社区之间的边数。