#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:
Это может быть достигнуто следующим образом:
- Разверните набор данных, чтобы у вас был obs. для каждой группы на каждую дату, используя, например
tidyr::complete
- Вычислите кумулятивную сумму по группам
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')