2016-07-05 54 views
2

我创建了一个与IGRAPH标识的社区成员:在IGRAPH情节更改布局结构基于社区

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

这为我提供每个节点属于集群。现在

当我绘制这样的:

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

它并没有提供一个布局,其中独有各组基于成员节点的分离。有谁知道可以提供此不同的布局?所有这一切都是采取布局:kamada.kawai和着色的成员资格,而不是重组布局,以便它由会员组织。

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

+0

什么是的igraph手册表明?我可以给出一个建议来尝试“Cytoscape”。它有一些非常好的视觉定制选项的图形。 – Rockbar

+1

通过在社区内的所有顶点之间添加(强)关系来修改网络,并计算此网络上的布局。然后使用原始网络的计算布局。 –

+0

假设我创建了强关系(将矩阵分成两部分),以便从0-集群数量中获得它,您是否认为如果将矩阵转换为此类型,它会在我进行布局时自动重新定位网络图? @GaborCsardi –

回答

3

您有与分配高权重的簇内的边缘和低重量,以跨越群集边界边缘的人工权重向量,以计算镰-河合布局:

> 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

+0

这很好,谢谢! –