如何强制 networkD3::sankeyNetwork() 重复节点而不是绕回同一节点
How to force networkD3::sankeyNetwork() to repeat nodes rather than circling back to same node
您好,我正在创建桑基图来显示迁移。我面临的一个方面是如何处理状态没有改变的情况,即没有发生迁移。
在这种情况下,sankey 绕回同一个源,创建一个圆而不是使用 'source- target' 布局,其中两个源目的地是分开的。
我想看类似
的内容
而不是跟随我现在看到的
以下是一个可重现的示例 - 感谢您对此提供的任何帮助
library(networkD3)
library(dplyr)
links<-data.frame(
source=c('One','Two','Two','Three','Three','Four','Four','Five','Five','Six'),
target=c('Two','Two','Three','Three','Four','Four','Five','Five','Six','Seven'),
value=c(78,108,27,14,31,38,17,76,10,89)
)
nodes <- data.frame(
name=c(as.character(links$source),
as.character(links$target)) %>% unique()
)
links$IDsource <- match(links$source, nodes$name)-1
links$IDtarget <- match(links$target, nodes$name)-1
sankeyNetwork(Links = links, Nodes = nodes,
Source = "IDsource", Target = "IDtarget",
Value = "value", NodeID = "name",
fontSize = 20)
您希望在图中看到的每个节点都必须在您的节点中唯一标识 data.frame。如果您希望一些唯一节点共享相同的标签,您可以为标签添加一列到节点 data.frame 并将其指定给 NodeID
参数......这些不需要是唯一的。
library(networkD3)
links <- read.csv(header = TRUE, strip.white = TRUE, text ="
source, target, value
One_1, Two_2, 78
Two_2, Two_3, 108
Two_2, Three_3, 27
Three_3, Three_4, 14
Three_3, Four_4, 31
Four_4, Four_5, 38
Four_4, Five_5, 17
Five_5, Five_6, 76
Five_5, Six_6, 10
Six_6, Seven_7, 89
")
id <- unique(c(as.character(links$source), as.character(links$target)))
label <- sub("_[0-9]", "", id)
nodes <- data.frame(id = id, label = label)
links$IDsource <- match(links$source, nodes$id)-1
links$IDtarget <- match(links$target, nodes$id)-1
sankeyNetwork(Links = links, Nodes = nodes,
Source = "IDsource", Target = "IDtarget",
Value = "value", NodeID = "label",
fontSize = 20)
您好,我正在创建桑基图来显示迁移。我面临的一个方面是如何处理状态没有改变的情况,即没有发生迁移。 在这种情况下,sankey 绕回同一个源,创建一个圆而不是使用 'source- target' 布局,其中两个源目的地是分开的。 我想看类似
的内容而不是跟随我现在看到的
以下是一个可重现的示例 - 感谢您对此提供的任何帮助
library(networkD3)
library(dplyr)
links<-data.frame(
source=c('One','Two','Two','Three','Three','Four','Four','Five','Five','Six'),
target=c('Two','Two','Three','Three','Four','Four','Five','Five','Six','Seven'),
value=c(78,108,27,14,31,38,17,76,10,89)
)
nodes <- data.frame(
name=c(as.character(links$source),
as.character(links$target)) %>% unique()
)
links$IDsource <- match(links$source, nodes$name)-1
links$IDtarget <- match(links$target, nodes$name)-1
sankeyNetwork(Links = links, Nodes = nodes,
Source = "IDsource", Target = "IDtarget",
Value = "value", NodeID = "name",
fontSize = 20)
您希望在图中看到的每个节点都必须在您的节点中唯一标识 data.frame。如果您希望一些唯一节点共享相同的标签,您可以为标签添加一列到节点 data.frame 并将其指定给 NodeID
参数......这些不需要是唯一的。
library(networkD3)
links <- read.csv(header = TRUE, strip.white = TRUE, text ="
source, target, value
One_1, Two_2, 78
Two_2, Two_3, 108
Two_2, Three_3, 27
Three_3, Three_4, 14
Three_3, Four_4, 31
Four_4, Four_5, 38
Four_4, Five_5, 17
Five_5, Five_6, 76
Five_5, Six_6, 10
Six_6, Seven_7, 89
")
id <- unique(c(as.character(links$source), as.character(links$target)))
label <- sub("_[0-9]", "", id)
nodes <- data.frame(id = id, label = label)
links$IDsource <- match(links$source, nodes$id)-1
links$IDtarget <- match(links$target, nodes$id)-1
sankeyNetwork(Links = links, Nodes = nodes,
Source = "IDsource", Target = "IDtarget",
Value = "value", NodeID = "label",
fontSize = 20)