Одним из возможных решений является вычисление среднего и стандартного отклонения за пределами ggplot2
с использованием, например, dplyr
:
library(dplyr)
VisualAcuity %>% group_by(Dir,day) %>%
summarise(Mean = mean(Acuity),
SEM = sd(Acuity)/ sqrt(n()))
# A tibble: 6 x 4
# Groups: Dir [2]
Dir day Mean SEM
<fct> <int> <dbl> <dbl>
1 CCW 1 0.376 0.0347
2 CCW 2 0.395 0.0297
3 CCW 3 0.391 0.00328
4 CW 1 0.392 0.0410
5 CW 2 0.381 0.0348
6 CW 3 0.403 0.0127
Затем вы можете добавить графическую часть, чтобы получить следующий график:
library(dplyr)
library(ggplot2)
VisualAcuity %>% group_by(Dir,day) %>%
summarise(Mean = mean(Acuity),
SEM = sd(Acuity)/ sqrt(n())) %>%
ggplot(aes(x = day, y = Mean, color = Dir, group = Dir))+
geom_line()+
geom_point()+
geom_errorbar(aes(ymin = Mean-SEM, ymax = Mean+SEM), width = 0.2)
![enter image description here](https://i.stack.imgur.com/YySWK.png)
В качестве альтернативы можно использовать stat_summary
следующим образом:
ggplot(VisualAcuity, aes(x = day, y = Acuity, color = Dir))+
stat_summary(geom = "line", fun = "mean")+
stat_summary(geom = "point", fun = "mean")+
stat_summary(fun.data = mean_se, geom = "errorbar", width = 0.2)
Отвечает ли он на ваш вопрос?
Воспроизводимый пример
structure(list(Dir = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("CCW",
"CW"), class = "factor"), day = c(1L, 1L, 1L, 2L, 2L, 2L, 3L,
3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L), Acuity = c(0.43,
0.386, 0.311, 0.428, 0.422, 0.336, 0.389, 0.397, 0.386, 0.464,
0.389, 0.322, 0.417, 0.414, 0.311, 0.425, 0.403, 0.381)), class = "data.frame", row.names = c(NA,
-18L))