R 包 NetworkD3 中的 SankeyNetwork 未找到具有最小交叉的 sankey

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

我正在使用 sankeyNetwork 函数创建非常简单的流数据图表。即使使用多次迭代,生成的图表显然也有不必要的交叉。

我在 R Studio 2023.06.2+561 中使用 R 版本 4.3.1 (2023-06-16) 运行了此代码。

library(networkD3)
source<-c(0,1,2,0)
target<-c(3,3,4,4)
value<-c(13320, 274, 10950, 96000)
links<-data.frame(source, target, value)
nodes<-data.frame(names=c('Solar', 'Wind', 'Natural Gas', 'Electricity', 'Hydrogen'))
p <- sankeyNetwork(Links = links, Nodes = nodes, Source = "source",
                   Target = "target", Value = "value", NodeID = "names", iterations=32, 
                   units = "TWh", fontSize = 12, nodeWidth = 30, sinksRight = FALSE)

生成的桑基图有一个明显可以避免的交叉点:如果“风”高于“太阳”,则不会有交叉点。我已经尝试了 1000 次迭代,但它没有做任何事情 - 这让我想知道问题是平台还是 R Studio - 因为 1000 次迭代应该比 1 慢。

Resulting Sankey Plot

r d3.js sankey-diagram networkd3
1个回答
0
投票

我无法解释为什么 d3-sankey 不能避免这种交叉,但是如果你改变数据的顺序(并且不用费心搞乱迭代),你可以避免它......

library(networkD3)
source<-c(1,0,2,1)
target<-c(3,3,4,4)
value<-c(13320, 274, 10950, 96000)
links<-data.frame(source, target, value)
nodes<-data.frame(names=c('Wind', 'Solar', 'Natural Gas', 'Electricity', 'Hydrogen'))
sankeyNetwork(Links = links, Nodes = nodes, Source = "source",
              Target = "target", Value = "value", NodeID = "names", 
              units = "TWh", fontSize = 12, nodeWidth = 30, sinksRight = FALSE)

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