基于社区改变IGraph图中的布局结构

时间:2016-07-05 03:56:19

标签: r layout cluster-analysis igraph

我创建了一个具有社区成员身份的igraph:

fc <- fastgreedy.community(graph)
colors <- rainbow(max(membership(fc)))

这为我提供了每个节点所属的集群。

现在我画这个:

plot(graph,vertex.color=colors[membership(fc)], 
    layout=layout.kamada.kawai)

它不提供一种布局,它根据成员资格专门分隔每组节点。有没有人知道可以提供这种不同的布局?所有这一切都是采取布局:kamada.kawai和成员中的着色,而不是重组布局,以便它由成员组织。

希望这个问题有道理。谢谢!

1 个答案:

答案 0 :(得分:3)

您必须使用人工权重向量计算Kamada-Kawai布局,该向量会为群集内的边缘赋予较高权重,并且对跨越群集边界的边缘赋予较低权重:

> graph <- grg.game(100, 0.2)                 # example graph
> cl <- fastgreedy.community(graph)
> weights <- ifelse(crossing(cl, graph), 1, 100)
> layout <- layout_with_kk(graph, weights=weights)
> plot(graph, layout=layout)

这里的技巧是ifelse(crossing(cl, graph), 1, 100)部分 - crossing(cl, graph)采用聚类和聚类所属的图形,并返回一个布尔矢量,为每个边缘定义边缘是否跨越聚类边界或不。然后ifelse()调用简单地将此向量中的TRUE(即边缘交叉边界)替换为1,并将FALSE(即边缘保留在群集内)替换为0。