Создайте диаграмму Санки с помощью ggforce, который пропускает узлы - PullRequest
0 голосов
/ 25 сентября 2019

Я хотел бы использовать пакет ggforce в R для создания диаграммы Санки, потому что я предпочитаю вид графиков параллельных наборов, созданных с помощью ggforce, для других визуализаций.У меня есть узлы, которые отсортированы по уровням слева направо.Однако я хочу, чтобы некоторые ссылки проходили напрямую, скажем, с уровня 1 на уровень 5, не касаясь узлов между ними.На этом изображении показана диаграмма Сэнки, созданная с помощью networkd3, где «производство» напрямую связано с «потерей» на промежуточных уровнях.enter image description here

Можно ли создать диаграмму этого типа с помощью 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')
...