Guest User

Untitled

a guest
Jan 16th, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. library(dplyr)
  2. library(tidyr)
  3. library(networkD3)
  4. library(htmlwidgets)
  5.  
  6. df <- read.csv(header = T, as.is = T, text = '
  7. name,origin,layover,destination
  8. Bob,Baltimore,Chicago,Los Angeles
  9. Bob,Baltimore,Chicago,Seattle
  10. Bob,New York,St Louis,Austin
  11. Bob,New York,Chicago,Seattle
  12. Tom,Baltimore,Chicago,Los Angeles
  13. Tom,New York,St Louis,San Diego
  14. Tom,New York,Chicago,Seattle
  15. Tom,New York,New Orleans,Austin
  16. ')
  17.  
  18. links <-
  19. df %>%
  20. mutate(row = row_number()) %>%
  21. mutate(traveler = .[[1]]) %>%
  22. gather("column", "source", -row, -traveler) %>%
  23. mutate(column = match(column, names(df))) %>%
  24. arrange(row, column) %>%
  25. group_by(row) %>%
  26. mutate(target = lead(source)) %>%
  27. ungroup() %>%
  28. filter(!is.na(target)) %>%
  29. select(source, target, traveler) %>%
  30. group_by(source, target, traveler) %>%
  31. summarise(count = n()) %>%
  32. ungroup()
  33.  
  34. nodes <- data.frame(name = unique(c(links$source, links$target)))
  35. links$source <- match(links$source, nodes$name) - 1
  36. links$target <- match(links$target, nodes$name) - 1
  37.  
  38. sn <- sankeyNetwork(Links = links, Nodes = nodes, Source = 'source',
  39. Target = 'target', Value = 'count', NodeID = 'name',
  40. )
  41.  
  42. # add origin back into the links data because sankeyNetwork strips it out
  43. sn$x$links$traveler <- links$traveler
  44.  
  45. # add onRender JavaScript to set the click behavior
  46. htmlwidgets::onRender(
  47. sn,
  48. '
  49. function(el, x) {
  50. var nodes = d3.selectAll(".node");
  51. var links = d3.selectAll(".link");
  52. nodes.select("rect").style("cursor", "pointer");
  53. nodes.on("mousedown.drag", null); // remove the drag because it conflicts
  54. //nodes.on("mouseout", null);
  55. nodes.on("click", clicked);
  56. function clicked(d, i) {
  57. links
  58. .style("stroke-opacity", function(d1) {
  59. return d1.traveler == d.name ? 0.5 : 0.2;
  60. });
  61. }
  62. }
  63. '
  64. )
Add Comment
Please, Sign In to add comment