Как добавить процентные значения к пластам в аллювиальном графике с помощью ggalluvial? - PullRequest
1 голос
/ 17 марта 2020

Я ищу наиболее удобный способ добавления округленных процентных меток к слоям аллювиального графика. В следующем примере 50 случаев. Независимо от этапов 1 или 2, каждый случай относится к одной группе A, B или C. Я хотел бы отображать относительную групповую принадлежность на каждом этапе.

library(ggplot2)
library(ggalluvial)

df <- data.frame('id' = rep(1:50,2),
                     'stage' = c(rep(1,50), rep(2,50)),
                     'group' = sample(c('A','B','C'), 100, replace = TRUE))

ggplot(df,
       aes(x = stage, stratum = group, alluvium = id, fill = group)) +
  scale_x_discrete(expand = c(.1, .1)) +
  geom_flow() +
  geom_stratum(alpha = .5)

enter image description here

Есть ли способ добавить метки с округленными процентами (включая " % ") к стратам (сегментам столбцов) без расчета процентного столбца в исходном кадре данных? Если я не совсем ошибаюсь, geom_text не работает здесь так же, как в geom_bar ().

1 Ответ

1 голос
/ 12 апреля 2020

К сожалению, я не думаю, что вы можете сделать это без вычисления процентного столбца в начальном фрейме данных. Но это можно сделать легко, а также дает большую гибкость с маркировкой:

library(ggplot2)
library(ggalluvial)

df <- data.frame('id' = rep(1:50,2),
                     'stage' = c(rep(1,50), rep(2,50)),
                     'group' = sample(c('A','B','C'), 100, replace = TRUE))

# the list needs to be reversed, as stratums are displayed reversed in the alluvial by default

stratum_list <- df %>% 
  group_by(stage, group) %>% 
  summarize(s = n()) %>%
  group_by(stage) %>%
  mutate(s = percent(s/sum(s), accuracy=0.1)) %>%
  arrange(stage, -as.numeric(group)) %>% 
  .$s

ggplot(df,
       aes(x = stage, stratum = group, alluvium = id, fill = group)) +
  scale_x_discrete(expand = c(.1, .1)) +
  geom_flow() +
  geom_stratum(alpha = .5) + 
  geom_text(stat = "stratum", label=stratum_list)

enter image description here

ОБНОВЛЕНИЕ [13/04/2020]

Добавлена ​​stratum_list реверсия, как Yonghao предложил

...