Создатель ggplot2
не является большим поклонником панелей ошибок на диаграмме с накоплением (см .: https://github.com/tidyverse/ggplot2/issues/1079), поэтому в ggplot2
нет удобного способа сделать это.
Хитрость заключается в том, чтобы вычислить позицию y строки ошибок в стеке. Здесь я использовал dplyr
для создания нового столбца в функции Volunteer и Method, которые будут кумулятивно добавлять Recovery, чтобы получить позицию y для каждого бара ошибок:
library(dplyr)
DF <- df %>% group_by(Volunteer, Method) %>%
mutate(Phase = factor(Phase, levels = c("Part3","Part2","Part1"))) %>%
mutate(SDpos = cumsum(Recovery))
# A tibble: 27 x 6
# Groups: Volunteer, Method [9]
Volunteer Method Phase Recovery SD SDpos
<chr> <chr> <fct> <dbl> <dbl> <dbl>
1 P1 Method1 Part1 50.6 0.1 50.6
2 P1 Method1 Part2 15.4 1.2 66
3 P1 Method1 Part3 8.8 2.1 74.8
4 P1 Method2 Part1 50.6 0.1 50.6
5 P1 Method2 Part2 15.4 1.2 66
6 P1 Method2 Part3 14.6 2.9 80.6
7 P1 Method3 Part1 50.6 0.1 50.6
8 P1 Method3 Part2 14.6 1.9 65.2
9 P1 Method3 Part3 16.6 2.3 81.8
10 P2 Method1 Part1 25.8 0.1 25.8
# … with 17 more rows
Затем я сделаю столбчатый столбец с накоплением и добавьте geom_errorbar
на основе созданного мной столбца SDpos (это будут мои значения y):
library(ggplot2)
ggplot(DF, aes(x = Method, y = Recovery, fill = Phase))+
geom_col()+
facet_wrap(.~Volunteer) +
scale_fill_discrete(breaks = c("Part1","Part2","Part3"))+
geom_errorbar(aes(ymin = SDpos-SD, ymax = SDpos+SD), width = 0.2)
Это выглядит так, как вы пытаетесь получить?