我试图使医学系中各机构之间的联系形象化,只是无法根据连接的数量对边缘进行加权和粗细显示。
我尝试将在这里找到的答案与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"
非常感谢您的帮助!
答案 0 :(得分:0)
使用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)
(我对您的plot语句进行了一些修改,以提高可读性。)
答案 1 :(得分:0)
非常感谢您的帮助!!我离那儿很近。.为了使其更易读,我减小了边缘的厚度,并用数字代替了名称,这是代码:
library(igraph)
D3 <- read.csv(file.choose(),header=TRUE,row.names = 1)
g <- graph.data.frame(D3, directed=FALSE)
g2 = simplify(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) } )
tkplot(g2,
vertex.color= "gold",
vertex.label.color="red",
vertex.size=10,
vertex.label.cex=1,
edge.width=E(g2)$weight*0.15,
edge.color="grey",
layout=layout.reingold.tilford,
asp = .5,
margin=-0.95)
创建: Reingold.tilford
我发现这种可视化效果很好,因为图形是交互式的。还有其他方法可以使其更具可读性吗?
再次感谢您的帮助! 祝一切顺利, 杰伊