gpt4 book ai didi

r - 在 igraph 中创建加权边而不是多个单一连接

转载 作者:行者123 更新时间:2023-12-05 06:26:23 26 4
gpt4 key购买 nike

我正在尝试可视化医学院机构之间的联系,但无法根据联系的数量对边缘进行加权和显示得更粗或更细。

我尝试将我在这里找到的答案与 edge.width = E(g)$weight 结合起来,并尝试 graph.strength(g)。但老实说,我不知道自己在做什么。这是我第一次使用 R,而且我没有任何编程经验。

library(igraph)
D3 <- read.csv(file.choose(),header=TRUE,row.names = 1)
g <- graph.data.frame(D3, directed=FALSE)
plot(g,
vertex.size=20,
vertex.label.dist=1,
vertex.label.degree=-pi/2,
layout=layout_with_kk)

Igraph 绘制了一个网络,其中显示了每个连接。一些机构彼此之间有多重联系,这使得图表看起来很不吸引人。 Only a Part of the table was used for this picture

我的数据如下所示,大约有 1500 行:

"1","NEUROLOGIE","MEDINF" 

my data

非常感谢任何帮助!

最佳答案

使用 edge.width = E(g)$weight 是正确的想法,但您需要获得正确的权重。 graph.strength(g) 是顶点的属性,但您需要边的权重。我不知道有什么函数可以直接计算两个顶点之间有多少条边,但是写一个并不难。

首先,得到一个版本的图,每对连接的顶点之间只有一条边。

g2 = simplify(g)

现在我们需要为 g2 的边获得正确的权重。如果一条边连接两个顶点,则连接这两个顶点的所有最短路径都是单边,因此对于简化 g2 的每条边,我们需要找到原始 g 中这些顶点之间的最短路径(边)的数量。然后我们就可以绘图了。

E(g2)$weight = sapply(E(g2), function(e) { 
length(all_shortest_paths(g, from=ends(g2, e)[1], to=ends(g2, e)[2])$res) } )
plot(g2,
vertex.size=15,
vertex.label.dist=0.5,
vertex.label.cex=0.8,
vertex.label.degree=-pi/2,
edge.width=E(g2)$weight,
layout=layout_with_kk,
margin=-0.2)

Graph with varying edge width

(我稍微修改了您的情节陈述以提高可读性。)

关于r - 在 igraph 中创建加权边而不是多个单一连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56199695/

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