Как добавить панели ошибок в сгруппированный столбчатый график в R, который требует смены уровней? - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь создать составной барплот с панелями ошибок. Файл данных находится здесь: https://github.com/Ginko-Mitten/Experimental.git

library(ggplot2)
Dat1<-Methods_Recovery_Comparison
Volunteer<-as.factor(Dat1$Volunteer)
Method<-as.factor(Dat1$Method)
Phase<-as.factor(Dat1$Phase)
Recovery<-as.numeric(Dat1$Recovery)
SD<-as.numeric(Dat1$SD)
SDU<-Recovery+SD
SDL<-Recovery-SD
Ext<-data.frame(Volunteer,Method,Phase,Recovery,SD,SDU,SDL)

ggplot(Ext,aes(Method))+
  geom_bar(aes(weight = Recovery, fill = Phase))+
  facet_grid(~Volunteer)+
  geom_errorbar(aes(ymax=Recovery+SD,ymin=Recovery-SD))

The Plot I'm getting now

Мне бы очень хотелось:
1. Порядок обращения Фазы в обратном порядке
2. Стержни ошибок для правильного выравнивания с брусками

Редактировать: Дополнительный запрос: можно ли специально осветить или сделать полость бруска для значения Волонтера 3 -> Метод 2 -> Фаза 3? (Соответствующее значение восстановления составляет 10,5). Это конкретное значение было аномальным, и хотелось бы выделить его в описании при написании.

1 Ответ

0 голосов
/ 28 января 2020

Создатель 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)

enter image description here

Это выглядит так, как вы пытаетесь получить?

...