Как создать гистограмму с динамическими переменными для каждой группы и включить планки погрешностей?

Я пытаюсь создать динамическую гистограмму точно такого же формата, как этот график модели здесь с использованием R. К сожалению, мой учитель не предоставил нам коды R для модельного графика, и поэтому эта динамическая гистограмма занимает у меня много часов, и я все еще не могу сделать ее точно такой же, как модельный график. Данные, которые я использовал для создания динамической гистограммы, находятся здесь:

tidyadhd <- structure(list(voltage = c(9.5, 10, 9.2, 6, 9, 11, 9, 9.2, 8, 
9, 11, 9, 8.2, 8, 9, 9, 6, NA, 9.5, 9, 7.1, 9.3, 9, 9.5, 9, 9.2, 
9.3, 9, 8.5, 9, 9.2, 9.3, 8.2, 9, 9.3, NA, 9.5, 9, 9.2, 9.3, 
9, 9.5, 9, 9.2, 9.3, 9, 9.5, 9, 9, 9, 9.3, 8, 7, 8, 5.1, 4.3, 
4.5, 5.3, 4.5, 5.1, 4.3, 4.5, 5.3, 4.5, 5.1, 4.3, 4.3, 4.3, 5.3, 
6.4, 5, 8), state = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L
), .Label = c("Rest", "Cue"), class = "factor"), treatment = c("placebo", 
"placebo", "placebo", "placebo", "placebo", "placebo", "placebo", 
"placebo", "placebo", "placebo", "placebo", "placebo", "placebo", 
"placebo", "placebo", "placebo", "placebo", "placebo", "placebo", 
"placebo", "placebo", "placebo", "placebo", "placebo", "placebo", 
"placebo", "placebo", "placebo", "placebo", "placebo", "placebo", 
"placebo", "placebo", "placebo", "placebo", "placebo", "ritalin", 
"ritalin", "ritalin", "ritalin", "ritalin", "ritalin", "ritalin", 
"ritalin", "ritalin", "ritalin", "ritalin", "ritalin", "ritalin", 
"ritalin", "ritalin", "ritalin", "ritalin", "ritalin", "ritalin", 
"ritalin", "ritalin", "ritalin", "ritalin", "ritalin", "ritalin", 
"ritalin", "ritalin", "ritalin", "ritalin", "ritalin", "ritalin", 
"ritalin", "ritalin", "ritalin", "ritalin", "ritalin"), patient = c(1L, 
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 
16L, 17L, 18L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 
12L, 13L, 14L, 15L, 16L, 17L, 18L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 
8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 1L, 2L, 
3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 
17L, 18L)), .Names = c("voltage", "state", "treatment", "patient"
), row.names = c(NA, -72L), class = "data.frame")

и изображение части выходной таблицы показано на этом изображении здесь: two-way ANOVA table

Может кто-нибудь научить меня, как создать динамический гистограмму с точно таким же форматом, как этот модельный график, пожалуйста? Спасибо.


person Zoey Choi    schedule 29.04.2018    source источник


Ответы (1)


Вы можете начать с этого сюжета.

library(tidyverse)
tidyadhd %>%
  group_by(treatment, state) %>%
  mutate(n = n()) %>%
  ungroup() %>%
  group_by(treatment, state, n) %>%
  summarise_at(vars(voltage), funs(mean, sd = sd), na.rm = TRUE) %>%
  mutate(se = sd / sqrt(n)) %>%
  ggplot(aes(treatment, mean, group = state, fill = state)) + geom_bar(stat = "identity", position = "dodge", color = "black") + 
  geom_errorbar(aes(ymin = mean - se, ymax = mean + se), width = 0.2, position = position_dodge(0.9)) +
  theme_classic() + scale_fill_manual(values = c("gray", "white")) +
  theme(
    legend.position = "bottom",
    panel.grid.minor = element_blank(),
    panel.grid.major.y = element_blank(),
    legend.title=element_blank())

введите здесь описание изображения

person hpesoj626    schedule 29.04.2018
comment
извините, у меня другой вопрос, что означает %›%? Потому что я поместил код в R, но он не может найти функцию %›% - person Zoey Choi; 29.04.2018
comment
%>%` — это оператор канала. Убедитесь, что вы сначала запускаете library(tidyverse), как в моем коде. - person hpesoj626; 29.04.2018
comment
извините, но он просто продолжает придумывать это: -- Прикрепление пакетов ---------------------------------- ---- tidyverse 1.2.1 -- Ошибка: сбой загрузки пакета или пространства имен для 'tidyverse': ошибка .onAttach в attachNamespace() для 'tidyverse', подробности: вызов: utils::packageVersion(x) ошибка: пакет 'tibble ' не найдено Кроме того: Предупреждающее сообщение: пакет tidyverse был собран под R версии 3.4.4 - person Zoey Choi; 29.04.2018
comment
Сначала необходимо установить tibble. Если не все пакеты tidyverse установлены, вы можете заменить library(tidyverse) на library(dplyr); library(ggplot2). - person hpesoj626; 29.04.2018
comment
Спасибо вам! Теперь это работает в моей R-студии, и у меня есть последний вопрос: я хочу изменить название моей метки оси Y на напряжение (мкВ), как и где мне это сделать? - person Zoey Choi; 29.04.2018
comment
Добавить ylab("voltage(μV)") после geom_bar(stat = "identity", position = "dodge", color = "black") + geom_errorbar(aes(ymin = mean - se, ymax = mean + se), width = 0.2, position = position_dodge(0.9)) - person hpesoj626; 29.04.2018
comment
Большое спасибо! Я закончил график, вы так полезны! Спасибо еще раз. - person Zoey Choi; 29.04.2018