我创建了一个具有社区成员身份的igraph:
fc <- fastgreedy.community(graph)
colors <- rainbow(max(membership(fc)))
这为我提供了每个节点所属的集群。
现在我画这个:
plot(graph,vertex.color=colors[membership(fc)],
layout=layout.kamada.kawai)
它不提供一种布局,它根据成员资格专门分隔每组节点。有没有人知道可以提供这种不同的布局?所有这一切都是采取布局:kamada.kawai和成员中的着色,而不是重组布局,以便它由成员组织。
希望这个问题有道理。谢谢!
答案 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。