Как назначить уровни узлам в многоуровневой диаграмме Санки? - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь построить интерактивную многоуровневую диаграмму Санки, используя R. Я не могу найти решение, как назначать уровни узлам. Например, узел a1 должен находиться на втором уровне графика, а не на пятом. Кажется, что пакет назначает последнему узлу в цепочке крайнюю правую позицию, что не является предпочтительным в моем случае. enter image description here

Я пробовал разные пакеты, такие как echarts4r, networkD3, ggvis, но кажется, что эти пакеты не обеспечивают функциональность для управления уровнями в графике.

Если вы знаете, как решить эту проблему, пожалуйста, поделитесь.

library('networkD3')
library('echarts4r')
library('googleVis')

sankey <- data.frame(
  source = c("a", "a", "b", "c", "d", "c"),
  target = c("b", "a1", "c", "d", "e", "e"),
  value = ceiling(rnorm(6, 10, 1)),
  stringsAsFactors = FALSE
)

# googleVis solution
plot(gvisSankey(sankey, from = 'source', to = 'target', weight = 'value'))

# echarts4r solution
sankey %>%
  e_charts() %>%
  e_sankey(source, target, value, focusNodeAdjacency = 'allEdges')


# networkD3 solution
nodes <- data.frame(name = c("a", "a1", "b", "c", "d", "e"))
links <- data.frame(
  source = c(0, 0, 2, 3, 4, 3),
  target = c(2, 1, 3, 4, 5, 5),
  value = ceiling(rnorm(6, 10, 1))
)

sankeyNetwork(Links = links, 
              Nodes = nodes, 
              Source = "source",
              Target = "target", Value = "value", NodeID = "name",
              fontSize = 12, nodeWidth = 30, sinksRight = TRUE)

1 Ответ

1 голос
/ 11 марта 2020

Используя , измените sinksRight = TRUE на sinksRight = FALSE

library('networkD3')

sankey <- data.frame(
  source = c("a", "a", "b", "c", "d", "c"),
  target = c("b", "a1", "c", "d", "e", "e"),
  value = ceiling(rnorm(6, 10, 1)),
  stringsAsFactors = FALSE
)

sankeyNetwork(Links = links, 
              Nodes = nodes, 
              Source = "source",
              Target = "target", Value = "value", NodeID = "name",
              fontSize = 12, nodeWidth = 30, sinksRight = FALSE)

enter image description here

...