0

Enchanté.

EDIT: Solution

As pointed out by MartineJ and emilliman5, nodes should be uniquely labelled (below).

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)

I've been toying to plot a Sankey diagram/riverplot (using the riverplot package) of how cancer registrations evolve over time, though this code has bought me little success so far. Could anyone possibly direct me on the faults of this code?

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

Here is the suspect 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)

And the data, which is included in code:

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

Eternally grateful.

www
  • 38,575
  • 12
  • 48
  • 84
  • 1
    Could you tell us what the problems, errors, warnings were? – KoenV May 18 '17 at 13:02
  • Many thanks for the edit suggestions. – Darren Thomas May 18 '17 at 13:06
  • The warning verbatim is: Warning message: In checkedges(x2$edges, names(x2)) : duplicated edge information, removing 1 edges – Darren Thomas May 18 '17 at 13:07
  • It would be a lot easier fot the community if you provided a minimal dataset. It would be even better if you would provide a great reproducible example. Looke [here](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) for an explanation. – KoenV May 18 '17 at 14:17
  • Addressed. Relatively new to both R and Stackoverflow. Patience appreciated. – Darren Thomas May 18 '17 at 15:05

2 Answers2

1

It looks like you're using the same value multiple times in N1 (and in N2). Try to make them all different (per column) and try again, f.i.:

N1: plus1 minus1 plus2 minus2

If you want to show only + and -: in makeRiver, there is an option **node_labels **

MartineJ
  • 591
  • 5
  • 16
0

Your nodes need to be named uniquely and then use the nodes$labels to change it back:

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

emilliman5
  • 5,816
  • 3
  • 27
  • 37