Я хотел бы использовать пакет ggforce
в R для создания диаграммы Санки, потому что я предпочитаю вид графиков параллельных наборов, созданных с помощью ggforce
, для других визуализаций.У меня есть узлы, которые отсортированы по уровням слева направо.Однако я хочу, чтобы некоторые ссылки проходили напрямую, скажем, с уровня 1 на уровень 5, не касаясь узлов между ними.На этом изображении показана диаграмма Сэнки, созданная с помощью networkd3, где «производство» напрямую связано с «потерей» на промежуточных уровнях.![enter image description here](https://i.stack.imgur.com/T2HdS.png)
Можно ли создать диаграмму этого типа с помощью 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')