2

ggforceR のパッケージを使用してサンキー ダイアグラムを作成したいと思います。なぜなら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')
4

0 に答える 0