gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:36:39 25 4
gpt4 key购买 nike

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

类似于已回答的问题 How to make grouped layout in 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])

Original Graph

不做任何事情,Group 就会被忽略。

现在,我们需要创建一个将绘制节点的布局
在同一个组里靠得很近。我们可以通过创建来做到这一点
具有相同节点的图,但之间有额外的链接
同一组中的节点。会给出群内链接
一个高权重,原始链接将被赋予一个小权重。
这将群集同一组中的节点。然后我们应用
布局绘制原始图形,没有额外的链接。
他们只是为了得到一个好的布局。
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)

Graph with nodes clustered by group

如果您想超越此范围以获得多个级别的分组,只需添加具有适当权重的附加链接以连接子组。

关于r - (igraph) 基于属性的分组布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37378744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com