【问题标题】:plotting communities in iGraph在 iGraph 中绘制社区
【发布时间】:2013-12-29 19:48:00
【问题描述】:

我想重现本文第 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) 

【问题讨论】:

  • 这是什么问题。
  • 您是否尝试过向论文作者发送电子邮件或查看他们的补充材料?

标签: r igraph


【解决方案1】:

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

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

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

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

  4. 折叠多个边如下:comm.graph &lt;- simplify(comm.graph, remove.loops=FALSE, edge.attr.comb=list(count="sum", "ignore"))

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

【讨论】:

    猜你喜欢
    • 2015-01-10
    • 2014-03-25
    • 2021-09-03
    • 2017-11-01
    • 2017-03-07
    • 2016-09-19
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多