ggplot2 для построения среднего значения и sd переменной рядом - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь создать график среднего и sd (рядом) переменной для двух разных групп в R, чтобы получить что-то вроде этого.

enter image description here

где синие полосы означают, а оранжевые - SD.

Для этого я использую пакет ggplot2 в R.Если я использую эти коды отдельно

ggplot(data, aes(x=factor(grouping variable), y=my variable)) + stat_summary(fun.y="mean", geom="bar", col="blue")

ggplot(data, aes(x=factor(grouping variable), y=my variable)) + stat_summary(fun.y="sd", geom="bar", col="orange")

, они работают хорошо, но выдают среднее значение и sd на двух разных графиках.

Поэтому я попытался объединить их в один график с помощью

stat = "summary", fun.y = "mean" and stat = "summary", fun.y = "sd"

и что я получил

ggplot(data, aes(x=factor(grouping variable)) + geom_bar(aes(y=my variable), stat = "summary", fun.y = "mean", position="dodge",col="blue") + geom_bar(aes(y=my variable), stat = "summary", fun.y = "sd", position="dodge",col="orange")

и появилась следующая ошибка

Ошибка: неожиданный символ в:
"ggplot (data, aes (x)= фактор (переменная группировки)) + geom_bar (aes (y = моя переменная), stat = "сводка", fun.y = "среднее", position = "dodge", col = "синий") + geom_bar (aes (y= моя переменная), stat = "summary", fun.y = "sd", positi ggplot "

Не могли бы вы помочь исправить ошибку или, возможно, есть другой способ сделать это?

Обновленная информация: образец моих данных выглядит как введите описание изображения здесь

Я запускаю следующий код для этих данных, чтобы построить среднее значение tTTO и sdtTTO для обоих интервьюеров:

ggplot(timeTTO, aes(x=interviewer, y=tTTO)) + 
  theme_light() + 
  labs(title = "Figure 3. Time taken to complete a single TTO task, by interviewer", x=NULL, y=NULL) + 
  theme(plot.title = element_text(face = "bold")) + 
  geom_bar(stat = "summary", fun.y = "mean",width=0.25, fill = "blue") + 
  geom_bar(stat = "summary", fun.y = "sd", width=0.25,fill = "orange") 

и я получил что-то вроде этого, где синие полосы означают средние значения, а оранжевые полосы представляют собой SD: введите описание изображения онre

На самом деле я пытался с помощью position = "dodge" поместить его в обе функции geom_bar (), он не работал

1 Ответ

0 голосов
/ 04 марта 2019

Кажется, position="dodge" для геом того же х, но не для статов.Я придумал два решения.

Во-первых, я сохранил ваши stat_summary's и использовал position_nudge, чтобы вручную поставить бары в указанные вами позиции.Обратите внимание, что легенда также не работает, потому что нет фактических данных графика, только слои статистики.

Во втором я проанализировал данные перед ggplot, используя group_by, суммировал, а затем собрал, чтобы сделатьданные длинные.Тогда мы можем использовать обычный geom_col теперь, когда данные уже обработаны.

library(tidyverse)
tibble(interviewer = c("i2", "i1", "i1", "i2", "i1"), tTTO = c(245, 251, 99, 85, 101)) %>%
  ggplot(aes(x=interviewer, y=tTTO)) + 
  theme_light() + 
  labs(title = "Figure 3. Time taken to complete a single TTO task, by interviewer", x=NULL, y=NULL) + 
  theme(plot.title = element_text(face = "bold"), legend.position = "bottom") + 
  geom_bar(stat = "summary", fun.y = "mean", position = position_nudge(x = -0.125, y = 0), width = 0.25, fill = "blue") + 
  geom_bar(stat = "summary", fun.y = "sd", position = position_nudge(x = 0.125, y = 0), width = 0.25, fill = "orange")

  # Notice that the legend does not work for stat geoms

tibble(interviewer = c("i2", "i1", "i1", "i2", "i1"), tTTO = c(245, 251, 99, 85, 101)) %>%
  group_by(interviewer) %>%
  summarize(mean(tTTO), sd(tTTO)) %>%
  gather(key = "type", value = "value", 2:3) %>%
  ggplot(aes(x=interviewer, y=value, fill=type)) + 
  theme_light() + 
  labs(title = "Figure 3. Time taken to complete a single TTO task, by interviewer", x=NULL, y=NULL) + 
  theme(plot.title = element_text(face = "bold"), legend.position = "bottom") + 
  geom_col(position = "dodge", width = 0.25) +
  scale_fill_manual(values = c("blue","orange"))

Создано в 2019-03-04 пакетом Представить (v0.2.1)

...