我想使用 R 中的包来创建一个桑基图,因为我更喜欢用其他可视化ggforce
制作的平行集图的外观。ggforce
我有从左到右按级别排序的节点。但是,我希望某些链接直接从 1 级到 5 级,而不会触及其间的节点。此图显示了使用 networkd3 制作的桑基图,其中“生产”直接链接到“浪费”的干预级别。
这种类型的图表可以用创建ggforce
吗?我尝试了以下方法,但它返回错误,因为它不允许任何级别的缺失值。
输入数据
fsc_sankey <- structure(list(stage1 = c("production", "production", "production",
"production", "production", "production", "production", "production",
"production"), stage2 = c(NA, "processing", "processing", "processing",
"processing", "processing", "processing", "processing", "processing"
), stage3 = c(NA, NA, "retail", NA, NA, NA, NA, "retail", "retail"
), stage4 = c(NA, NA, NA, "foodservice", "foodservice", "institutions",
"institutions", "households", "households"), destination = c("waste",
"waste", "waste", "consumed", "waste", "consumed", "waste", "consumed",
"waste"), value = c(1L, 1L, 1L, 3L, 1L, 3L, 1L, 3L, 1L)), class = "data.frame", row.names = c(NA,
-9L))
代码
library(tidyverse)
library(ggforce)
fsc_sankey_set <- gather_set_data(fsc_sankey, 1:5) %>%
mutate(x = factor(x, levels = c('stage1','stage2','stage3','stage4','destination')))
ggplot(fsc_sankey_set, aes(x, id = id, split = y, value = value)) +
geom_parallel_sets(alpha = 0.3, axis.width = 0.1) +
geom_parallel_sets_axes(axis.width = 0.1) +
geom_parallel_sets_labels(colour = 'white')