如何使用igraph使边缘粗细,颜色和线条类型取决于边缘值?

问题描述 投票:4回答:1

我正在尝试绘制网络,以显示17种植物性状之间的依赖性。该网络将用于帮助解释其他分析的结果,而不是为依赖关系本身提供指导。

我正在R中使用igraph,并使用17x17相关矩阵作为输入。矩阵中的相关性已更改,因此第一位数字代表一个类别。尽管我对R相当陌生,但是从我可以[[几乎产生我所设想的图形的意义上来说,它进展顺利。

但是,我找不到一种使边缘样式依赖于相关值的方法。我可以针对颜色和重量执行此操作,但是以权重相关的方式添加lty或edge.lty不会生成所需的图形,尽管代码运行时没有错误。想法是使用3种线型,因此-4和-3之间的值与-3和-2之间的值具有不同的样式,等等。...“组”表示仅在处理x中存在的相关性,或仅在y等。

环顾四周,我没有遇到这个问题,所以我想问一下。

我一直在使用的代码(下面)可能不太漂亮,但是对于像我这样经验不足的用户来说,它至少不起作用:)

[我尝试(除其他外)添加E(graphY1W)[权重<= -4.0&权重

graphY1W<-graph.adjacency(Y1W,weighted=TRUE,mode="undirected",diag=FALSE) E(graphY1W)[weight <= -4.0 & weight < -3.75]$color <- "black" #strong - relationship group1 E(graphY1W)[weight <= -4.0 & weight < -3.75]$width <- 7 E(graphY1W)[weight >= -3.75 & weight <= -3.5 ]$color <- "black" #weak - relationship group1 E(graphY1W)[weight >= -3.75 & weight <= -3.5 ]$width <- 3 E(graphY1W)[weight <= 4.0 & weight > 3.75 ]$color <- "grey" #strong + relationship group1 E(graphY1W)[weight <= 4.0 & weight > 3.75 ]$width <- 7 E(graphY1W)[weight <= 3.75 & weight >= 3.5 ]$color <- "grey" #weak + relationship group1 E(graphY1W)[weight <= 3.75 & weight >= 3.5 ]$width <- 3 E(graphY1W)[weight >= -3.0 & weight < -2.75]$color <- "black" #strong - relationship group2 E(graphY1W)[weight >= -3.0 & weight < -2.75]$width <- 7 E(graphY1W)[weight >= -2.75 & weight <= -2.5 ]$color <- "black" #etc E(graphY1W)[weight >= -2.75 & weight <= -2.5 ]$width <- 3 E(graphY1W)[weight <= 3.0 & weight > 2.75 ]$color <- "grey" E(graphY1W)[weight <= 3.0 & weight > 2.75 ]$width <- 7 E(graphY1W)[weight <= 2.75 & weight >= 2.5 ]$color <- "grey" E(graphY1W)[weight <= 2.75 & weight >= 2.5 ]$width <- 3 E(graphY1W)[weight >= -2.0 & weight < -1.75 ]$color <- "black" E(graphY1W)[weight >= -2.0 & weight < -1.75 ]$width <- 7 E(graphY1W)[weight >= -1.75 & weight <= -1.5 ]$color <- "black" E(graphY1W)[weight >= -1.75 & weight <= -1.5 ]$width <- 3 E(graphY1W)[weight <= 2.0 & weight > 1.75 ]$color <- "grey" E(graphY1W)[weight <= 2.0 & weight > 1.75 ]$width <- 7 E(graphY1W)[weight <= 1.75 & weight >= 1.5 ]$color <- "grey" E(graphY1W)[weight <= 1.75 & weight >= 1.5 ]$width <- 3 V(graphY1W)$color <- ifelse(V(graphY1W)$name=="Pn", "grey", ifelse(V(graphY1W)$name=="gs", "grey", ifelse(V(graphY1W)$name=="Pn_amb.Pn_sat", "grey", ifelse(V(graphY1W)$name=="WUE", "grey", ifelse(V(graphY1W)$name=="WP", "grey", ifelse(V(graphY1W)$name=="TL", "grey95", ifelse(V(graphY1W)$name=="FMDM", "grey95", ifelse(V(graphY1W)$name=="Chl", "grey45", ifelse(V(graphY1W)$name=="Chlab", "grey45", ifelse(V(graphY1W)$name=="Car", "grey45", ifelse(V(graphY1W)$name=="MP", "white", ifelse(V(graphY1W)$name=="LMF", "white", ifelse(V(graphY1W)$name=="SRR", "white", ifelse(V(graphY1W)$name=="SLAP", "grey95", ifelse(V(graphY1W)$name=="AP", "grey95", ifelse(V(graphY1W)$name=="NAR", "white", ifelse(V(graphY1W)$name=="RGR", "white","white"))))))))))))))))) plot(graphY1W,layout=layout.fruchterman.reingold, vertex.color=V(graphY1W)$color, vertex.label.color="black", vertex.shape="circle",vertex.size=10, vertex.label.cex=0.9, asp=0.5, frame=FALSE)

r igraph
1个回答
3
投票
我不确定您在做什么错,但是这是怎么做。

library(igraph) g <- graph.ring(10) E(g)$lty <- 1:5 plot(g)

“图图”

您可能没有任何虚线的边缘,这就是为什么它们不出现的原因。顺便说一句。 weight <= -4.0 & weight < -3.75是多余的,也许您想要weight > -3.75

© www.soinside.com 2019 - 2024. All rights reserved.