【发布时间】:2014-08-05 14:53:47
【问题描述】:
我正在尝试绘制一个网络,显示 17 个植物性状之间的依赖关系。该网络将用于帮助解释一些其他分析的结果,而不是为依赖项本身提供指导。
我在 R 中使用 igraph,以 17x17 相关矩阵作为输入。矩阵中的相关性发生了变化,因此第一个数字代表一个类别。虽然我对 R 比较陌生,但从某种意义上说,它进展顺利,我几乎可以生成我设想的图形。
但是,我找不到使边缘样式依赖于相关值的方法。我可以为颜色和重量这样做,但是以重量相关的方式添加 lty 或 edge.lty 不会产生所需的图形,尽管代码运行没有错误。这个想法是使用 3 种线型,因此 -4 和 -3 之间的值与 -3 和 -2 等值之间的值具有不同的风格......“组”表示仅在治疗 x 中存在的相关性,或仅在 y 等。
在这里找了很多次求助,没遇到过这个问题,所以想问问。
我一直在使用的代码(如下)可能并不漂亮,但对于像我这样没有经验的用户来说,它最不适用:)
我尝试(除其他外)添加 E(graphY1W)[weight
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)
【问题讨论】: