2014-06-26 76 views
5

一些过程的结果是通过乙从A到C的路径列表,例如:三个柱形图

which.effect(A1,A2,10,1,1) 
[[1]] 
[1] 10 2 1 

[[2]] 
[1] 10 28 1 

[[3]] 
[1] 10 6 9 

[[4]] 
[1] 10 24 9 

[[5]] 
[1] 10 28 9 

我想有是具有三个平行的列的曲线图,所述第一对起点,第二个为中间点,第三个为目的地。在本例中,第一列将只有节点10,第二个2, 6, 24, 28和第三个1, 9。然后,有向边(箭头)将从第一列中的节点到第二列中的节点,并且从第二列中的节点到第三列中的节点。

这是甚至可能与igraph

在此先感谢。

+0

得到一个树形结构,我想我误删@的Gabor-csardi答案。有没有办法恢复它? – jcredberry

回答

6

不完全确定这是你想要的,但也许会让你有一些方法。

这个想法是首先从你的数据形成一个边缘列表,然后创建一个邻接矩阵然后绘图。

library(igraph) 
library(Rgraphviz) 

# your data 
lst <- list(c(10,2,1), c(10,28,1), c(10,6,9), c(10,24,9), c(10,28,9)) 

# create edge list (from in first column/to in the second) 
d <- do.call(rbind, lst) 
edges <- rbind(d[,1:2], d[,2:3]) 

# get adjacency matrix 
g <- graph.data.frame(edges, directed=TRUE) 
adj <- as.matrix(get.adjacency(g)) 

# convert to a graph object and plot 
g2 <- new("graphAM", adjMat=adj, edgemode="directed") 
plot(g2, attrs = list(graph = list(rankdir="LR"), 
          node = list(fillcolor = "lightblue"))) 

rankdir="LR"曲线图从左至右

enter image description here

以上小区采用dot给予严格的结构。

编辑

使用layout = layout.reingold.tilford使用igraph

E(g)$curved <- 0 
plot.igraph(g, vertex.size=30, layout=layout.reingold.tilford)