如何为多级sankey图中的节点分配级别?

问题描述 投票:0回答:1

我正在尝试使用R构建交互式多级sankey图。我找不到解决方案如何将级分配给节点。例如,a1节点应位于图表的第二级,但不能位于第五级。似乎程序包将链中的最后一个节点分配到最右边的位置,在我的情况下,这不是可取的。enter image description here

[我尝试了echarts4rnetworkD3ggvis等不同的程序包,但这些程序包似乎不提供管理图形级别的功能。

如果您知道如何解决此问题,请分享。

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)
r echarts sankey-diagram googlevis networkd3
1个回答
1
投票

使用,将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

© www.soinside.com 2019 - 2024. All rights reserved.