График кумулятивной суммы области с накоплением

#r #ggplot2

#r #ggplot2

Вопрос:

У меня есть df фрейм данных, очень похожий на следующий:

       value group      dates
      1     1           2020-01-01
      5     1           2020-01-02
      6     1           2020-01-03
      1     2           2020-01-04
      3     2           2020-01-05
      1     2           2020-01-06
 

Мне нужно создать диаграмму области с накоплением, показывающую общую сумму значений, например:

 ggplot(df,aes(x=dates,y=cumsum(value))) geom_area()
 

что приводит к этому:

введите описание изображения здесь

Что мне нужно, так это заполнить график цветами в соответствии с группой, вот так:

введите описание изображения здесь

но я не смог выяснить, как это сделать. Я уверен, что это тривиально, но, к сожалению, ответ ускользает от меня.

То, что я пробовал, это просто добавление заливки, например, так ggplot(df,aes(x=dates,y=cumsum(value),fill=as.factor(group))) geom_area(position = 'stack') , но это приводит к следующему

введите описание изображения здесь

Ответ №1:

Это может быть достигнуто следующим образом:

  1. Разверните набор данных, чтобы у вас был obs. для каждой группы на каждую дату, используя, например tidyr::complete
  2. Вычислите кумулятивную сумму по группам
 library(tidyverse)

df <- read.table(text = "value group      dates
      1     1           2020-01-01
      5     1           2020-01-02
      6     1           2020-01-03
      1     2           2020-01-04
      3     2           2020-01-05
      1     2           2020-01-06", header = TRUE)

df %>% 
  tidyr::complete(group, dates, fill = list(value = 0)) %>% 
  arrange(group, dates) %>%
  group_by(group) %>% 
  mutate(dates = as.Date(dates),
         value = cumsum(value)) %>% 
  ggplot(aes(x=dates,y = value, fill = factor(group), group = rev(group)))   geom_area(position = 'stack')