Ошибка: отображение должно быть создано с помощью aes () или aes_ () в линейном графике с панелями ошибок - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь сделать линейный график с 2 линиями и барами ошибок в каждой точке. Мой код размещен ниже вместе с некоторыми примерами данных. Мой вопрос заключается в том, как добавить столбцы ошибок к графику - я могу построить график и рассчитать стандартное значение ошибки, но R продолжает отвечать сообщением: «Ошибка: отображение должно быть создано с помощью aes() or aes _ ()». Заранее благодарим за понимание!

Код:

#### Load Libraries ####
library(ggplot2)
library(plyr)
library(dplyr)
#### Load Data ####
rm(list = ls())
VisualAcuity <- read.csv(file.choose(), stringsAsFactors = TRUE)
View(VisualAcuity)
summary(VisualAcuity)
#### Make the Plot ####
VA <- ddply(VisualAcuity, c("Dir", "Day"), summarise, Acty=mean(Acuity))
View(VA)
dplyr::summarise(VisualAcuity, std_err=sd(Acuity)/sqrt(n()), n=n()) %>%
  ggplot(VA, aes(x=Day, y=Acty, colour=Dir)) + 
  geom_line() + geom_point() + ylim (min(0), max(0.6)) +
  geom_errorbar(aes(ymin=Acty - std_err, ymax = Acty + std_err)) +
  ylab('Visual Acuity') + theme(axis.line=element_line(colour='black')) + theme(panel.background = element_blank()) 

Данные:

enter image description here

1 Ответ

1 голос
/ 29 апреля 2020

Одним из возможных решений является вычисление среднего и стандартного отклонения за пределами 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

В качестве альтернативы можно использовать 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))
...