Fixing the order of a Sankey flow graph in R / networkD3 package
Asked Answered
B

1

8

I would like to visualize a rank change (i.e. change of the relative order) of US states using a Sankey flow graph. I'm using the package and came up with the following:

library(dplyr)
library(networkD3)

df <- data_frame(origins=state.name[1:10], destinations=state.name[1:10])
lab <- c(df$origins, df$destinations)
nodes <- data.frame(node=c(0:9), name=lab)
links <- data.frame(source=c(0:9), target=c(10:19), value=rep(1,10))
sankeyNetwork(Links = links, Nodes = nodes, Source = 'source', 
              Target = 'target', Value = 'value', NodeID = 'name')

This snippet produces the following graph: Sankey flow graph of US states enter image description here

I can change the relative order by hand now. However, I wonder whether it is possible to fix the order on the right-hand side and put e.g. Alabama on rank 3, California on rank 1, etc ...

Buzzell answered 7/9, 2018 at 20:35 Comment(0)
O
18

If you set iterations = 0 in sankeyNetwork(), you will effectively disable the algorithm which automatically determines the node placement (which is the primary purpose of the sankeyNetwork() function), and the nodes will be placed in the order that they appear in the Nodes dataframe.

library(networkD3)

states <- state.name[1:10]
ranks <- sample.int(10)

nodes <- data.frame(name = c(states, states[ranks]))
links <- data.frame(source = 1:10 - 1, target = order(ranks) + 10 - 1, value = 1)

sankeyNetwork(Links = links, Nodes = nodes, Source = 'source', 
              Target = 'target', Value = 'value', NodeID = 'name',
              iterations = 0)

enter image description here

Orling answered 7/9, 2018 at 21:27 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.