根据社区更改IGraph绘图中的布局结构

3
我创建了一个包含社区成员身份的igraph:
fc <- fastgreedy.community(graph)
colors <- rainbow(max(membership(fc)))

这为我提供了每个节点所属的集群。现在当我绘制这个时:
plot(graph,vertex.color=colors[membership(fc)], 
    layout=layout.kamada.kawai)

这个布局不能根据成员资格来独立分离每个节点组,您知道有哪种不同的布局可以提供这种功能吗?所有这些都只是把布局:kamada.kawai 着色,而不是重新组织布局以便按成员资格组织。

希望这个问题表述清楚了。谢谢!


igraph手册建议了什么?我可以建议尝试一下“Cytoscape”。它有一些非常好的图形可视化自定义选项。 - Rockbar
1
通过在社区内部所有顶点之间添加(强)连边来修改网络,并计算此网络上的布局。然后使用原始网络与计算出的布局。 - Gabor Csardi
假设我创建了强关系(将矩阵二分),使得我们从0到聚类数都有,您认为如果我将矩阵转换为此格式,当我进行布局时,它会自动重新定位网络图吗?@GaborCsardi - nak5120
1个回答

4

您需要使用人造权重向量计算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。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接