2017-05-18 2 views
0

Verzaubert.Sankey Grundstück mit dem Riverplot Paket

EDIT: Lösung

Wie MartineJ und emilliman5 weisen darauf hin, Knoten eindeutig gekennzeichnet werden soll (siehe unten).

library("riverplot") 
nodes<-structure(list(ID = c("2011+", "2011-", "2016+", "2016-"), x = c(20, 
20, 30, 30), y = c(50, 40, 50, 40)), class = "data.frame", row.names = c(NA, 
-4L)) 
edges<-structure(list(N1 = c("2011+", "2011-", "2011+", "2011-"), N2 = 
c("2016+", "2016-", "2016-", "2016+"), Value = c(461, 7, 0, 46)), class = 
"data.frame", row.names = c(NA, -4L)) 

river <- makeRiver(nodes,edges) 
riverplot(river) 

Ich habe bisher ein Sankey-Diagramm/riverplot (mit dem riverplot Paket) plotten liebäugelt, wie Krebs Registrierungen entwickeln im Laufe der Zeit, wenn dieser Code gekauft hat mir wenig Erfolg. Könnte mich jemand auf die Fehler dieses Codes hinweisen?

Warning message: In checkedges(x2$edges, names(x2)) : duplicated edge information, removing 1 edges 

Hier ist der Verdächtige Code:

library(“riverplot”) 

edges<-structure(list(N1 = c("+", "-", "+", "-"), N2 = c("+", "-", "-", "+"), Value = c(664L, 50L, 0L, 46L)), .Names = c("N1", "N2", "Value"), class = "data.frame", row.names = c(NA, -4L)) 

nodes = data.frame(ID = unique(c(edges$N1, edges$N2)), stringsAsFactors = FALSE) 

nodes$x = c(1,2) 
rownames(nodes) = nodes$ID 

rp <- list(nodes=nodes, edges=edges) 

class(rp) <- c(class(rp), "riverplot") 

plot(rp) 

Und die Daten, die im Code enthalten ist:

N1 N2 Value 
+  +  664 
-  -  50 
+  -  0 
-  +  46 

Ewig dankbar.

+1

Können Sie uns sagen, was die Probleme, Fehler, Warnungen waren? – KoenV

+0

Vielen Dank für die Bearbeitungsvorschläge. –

+0

wörtlich die Warnung: Warnmeldung: In checkedges (x2 $ Kanten, Namen (x2)): dupliziert Kanteninformationen, Entfernen 1 Kante –

Antwort

0

Ihre Knoten müssen eindeutig benannt werden und dann die nodes$labels verwenden, es zu ändern zurück:

library(riverplot) 

edges<-structure(list(N1 = c("+", "-", "+", "-"), N2 = c("+", "-", "-", "+"), Value = c(664L, 50L, 0L, 46L)), .Names = c("N1", "N2", "Value"), class = "data.frame", row.names = c(NA, -4L)) 
edges$N1 <- paste0(edges$N1, "a") 
edges$N2 <- paste0(edges$N2, "b") 
nodes = data.frame(ID = unique(c(edges$N1, edges$N2)), stringsAsFactors = FALSE) 

nodes$x = c(1,1,2,2) 
nodes$labels <- as.character(substr(nodes$ID, 1, 1)) 
rownames(nodes) = nodes$ID 

rp <- list(nodes=nodes, edges=edges) 

class(rp) <- c(class(rp), "riverplot") 

plot(rp) 

enter image description here

1

Es scheint, als ob Sie den gleichen Wert mehrmals in N1 (und in N2) verwenden. Versuchen Sie, sie alle verschieden (pro Spalte) zu machen und versuchen Sie es erneut, fi:

N1: plus1 Minus1 plus2 MINUS2

Wenn Sie wollen zeigen nur + und -: in makeRiver, gibt es eine Option * * node_labels **

+0

geschätzt. Umbenannte Knoten - und Erfolg! –