R 描述供应网络结构

R 描述供应网络结构,r,plot,R,Plot,我想绘制一个供应网络结构图。我曾尝试使用igraph,但直到现在还没有得出合理的结果。示例如下所示: library(igraph) d <- read.table(text = "V1 V2 weight s1 p1 88 s3 p1 100 s2 p2 100 s3 p2 43 p1 c1 21 p1 c2 79

我想绘制一个供应网络结构图。我曾尝试使用igraph,但直到现在还没有得出合理的结果。示例如下所示:

library(igraph)
d <- read.table(text = "V1 V2 weight
            s1  p1  88
            s3  p1  100
            s2  p2  100
            s3  p2  43
            p1  c1  21
            p1  c2  79
            p1  c3  88
            p2  c1  22
            p2  c2  121
            ", stringsAsFactors = F, header = T)

g <- graph_from_data_frame(d, directed = T)
plot(g, layout=layout.fruchterman.reingold,
     edge.width=E(g)$weight/20,
     vertex.shape = "none", vertex.label.font = 2,
     vertex.label.cex=1.1, edge.color="gray70")   
库(igraph)

d是的,这在igraph中是可行的。制作自己的布局的一种方法。一种简单的方法是将所有“s”节点放置在x=1处,“p”节点放置在x=2处,“c”节点放置在x=3处。每种类型(s、p、c)的每个不同节点都应获得唯一的y值,以便它们不会重叠。使用示例图:

LO = matrix(0, nrow=vcount(g), ncol=2)
LO[grep("s", V(g)$name), 1] = 1
LO[grep("p", V(g)$name), 1] = 2
LO[grep("c", V(g)$name), 1] = 3
LO[,2] = ave(rep(1, vcount(g)), LO[,1], FUN = seq_along) 

plot(g, layout=LO, edge.width=E(g)$weight/20, 
     vertex.shape = "none", vertex.label.font = 2,
     vertex.label.cex=1.1, edge.color="gray70") 

另外,在@Henrik的评论之后,您可以使用
layout\u和\u sugiyama
。您仍然需要定义(s,p,c)-层。此外,杉山还垂直排列图层。您需要交换x和y坐标以获得水平布局

Layers = rep(0,vcount(g))
Layers[grep("s", V(g)$name)] = 3
Layers[grep("p", V(g)$name)] = 2
Layers[grep("c", V(g)$name)] = 1
LO2 = layout_with_sugiyama(g, layers=Layers)$layout
LO2 = LO2[,2:1]

plot(g, layout=LO2, edge.width=E(g)$weight/20, 
     vertex.shape = "none", vertex.label.font = 2,
     vertex.label.cex=1.1, edge.color="gray70") 

我想你在描述一个三方图。参见例如。你甚至做了轮换。谢谢。