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

Change Layout Structure in IGraph Plot based on Community

我创建了一个标识了社区成员的 igraph:

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

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

现在当我绘制这个时:

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

它不提供根据成员资格专门分隔每组节点的布局。有谁知道可以提供这个的不同布局?所有这一切都是采用布局:kamada.kawai 并在成员中着色,而不是重构布局以便按成员组织。

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

您必须使用人工权重向量计算 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) 采用聚类和聚类所属的图,returns 一个布尔向量,它为每条边定义是否边缘是否跨越集群边界。然后 ifelse() 调用简单地用 1 替换此向量中的 TRUE(即边交叉边界),用 0 替换 FALSE(即边留在簇内)。