(igraph)基于属性的分组布局

(igraph)基于属性的分组布局,r,igraph,R,Igraph,我使用R中的iGraph包来布局网络图,我想根据属性值对顶点坐标进行分组 与回答的问题类似,我的问题的不同之处在于,节点不需要按照社区检测算法派生的社区成员资格进行分组 相反,我希望根据每个顶点预先已知的属性值使用组进行布局 例如,如果每个顶点都有一个属性“Master.Org”,并且Master.Org有~10到~20个不同的值,那么如何布局图形,以便将同一Master.Org中的所有顶点分组 谢谢 附加细节 事实上,两个单独的属性提供嵌套的分组级别 我的目标是布局一个图形对象,使“Maste

我使用R中的iGraph包来布局网络图,我想根据属性值对顶点坐标进行分组

与回答的问题类似,我的问题的不同之处在于,节点不需要按照社区检测算法派生的社区成员资格进行分组

相反,我希望根据每个顶点预先已知的属性值使用组进行布局

例如,如果每个顶点都有一个属性“Master.Org”,并且Master.Org有~10到~20个不同的值,那么如何布局图形,以便将同一Master.Org中的所有顶点分组

谢谢

附加细节

事实上,两个单独的属性提供嵌套的分组级别

我的目标是布局一个图形对象,使“Master.Org”和“Org.Of”值在图形上的XY坐标中分组在一起

例如,每个节点都属于一个“Org.Of”。在“Master.Org”中可以有多个“Org.Of”值

想法?
谢谢

虽然这个问题很古老,但它是一个合理的问题,值得回答

没有提供任何数据,因此我将生成一个任意示例

library(igraph)
set.seed(1234)
G = erdos.renyi.game(20, 0.25)
V(G)$Group1 = sample(3,20, replace=TRUE)
plot(G, vertex.color=rainbow(3, alpha=0.4)[V(G)$Group1])

如果不采取任何行动,该组将被忽略

现在,我们需要创建一个布局来绘制节点 在同一组中靠得很近。我们可以通过创建 具有相同节点但在节点之间具有附加链接的图 同一组中的节点。将提供组内链接 高权重和原始链接将被赋予一个小权重。 这将群集同一组中的节点。然后我们应用 布局以打印原始图形,无需额外链接。 他们只是为了得到一个好的布局

G_Grouped = G
E(G_Grouped)$weight = 1

## Add edges with high weight between all nodes in the same group
for(i in unique(V(G)$Group1)) {
    GroupV = which(V(G)$Group1 == i)
    G_Grouped = add_edges(G_Grouped, combn(GroupV, 2), attr=list(weight=5))
} 

## Now create a layout based on G_Grouped
set.seed(567)
LO = layout_with_fr(G_Grouped)

## Use the layout to plot the original graph
plot(G, vertex.color=rainbow(3, alpha=0.4)[V(G)$Group1], layout=LO)


如果您想超越这一点,实现多个级别的分组,只需添加具有适当权重的附加链接,即可连接子组。

我仍在研究这一点,但仍面临挑战。基本上,因为数据是一个组织结构图,我已经知道社区的破裂和他们所在的位置。每个节点都有一个属性来指示它们所在的“社区”。因此,我的挑战是通过使用这些属性作为权重机制的输入来适当地布局图,如上文所述。思想?非常感谢。在您的示例中,是否可以将“V(G)$Group1”转换为“communities object”?@Nick,是的!假设您在上面的示例中运行了
CLG=cluster\u louvain(G)
。您可以完全按照我上面所做的做,但每次我编写
V(G)$Group1
时,都会将其替换为
CLG$membership
。它应该很好用。