2014-06-26 6 views
5

Das Ergebnis eines Prozesses ist eine Liste von Pfaden von A bis C durch B, zum Beispiel:Drei Spalte Graph

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 

Was würde ich mit drei parallelen Spalten ist eine grafische Darstellung haben möchten, die erste für die Ursprung, der zweite für den Zwischenpunkt und der dritte für das Ziel. In diesem Beispiel hätte die erste Spalte nur den Knoten 10, die zweite 2, 6, 24, 28 und die dritte 1, 9. Dann werden gerichtete Kanten (Pfeile) von Knoten in der ersten Spalte zu Knoten in der zweiten Spalte und von Knoten in der zweiten Spalte zu Knoten in der dritten Spalte gehen.

Ist dies auch mit igraph möglich?

Vielen Dank im Voraus.

+0

Ich glaube, ich versehentlich gelöscht @ gabor-csardi Antwort verwenden. Gibt es eine Möglichkeit, es wiederherzustellen? – jcredberry

Antwort

6

Nicht genau, ob dies das ist, was Sie wollen, aber vielleicht bekommen Sie einen Teil des Weges dorthin.

Die Idee besteht darin, zunächst eine Kantenliste aus Ihren Daten zu erstellen, um dann eine Adjazenzmatrix zu erstellen und dann zu plotten.

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" Plots der Graph von links nach rechts

enter image description here

Above Grundstück verwendet dot die strenge Struktur zu geben.

EDIT

Verwenden layout = layout.reingold.tilford eine Baumstruktur erhalten igraph

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