Boxplot в r - как построить два столбца (один со значениями, относящимися к разным категориям) - PullRequest
0 голосов
/ 23 марта 2020

Итак, я хочу построить коробочный сюжет. У меня есть 10 вопросов, и на эти 10 вопросов ответили 200 человек. Я кодировал две колонки на основе этих данных. Один столбец состоит из значений (от 1 до 7 - ответ, который дал каждый участник на заданный вопрос), а второй - из имен каждого вопроса (200 раз есть Первый, 200 раз Второй, 200 раз Третий и т. Д.) , Вот так это выглядит так:

Question Value
First    3
Second   7
Third    4
Fourth   3
...
Tenth    1
First    5
Second   6

И я пытался построить блокпост с использованием ggplot, но главная проблема в том, что я хочу, чтобы на оси y были названия вопросов, а также средства и SD по оси x, но средства должны относиться только к данному вопросу (т. Е. Я хочу показать на графике, каково среднее значение для всех участников, ответивших на первый, второй и др. c. Вопрос). Я пытался использовать некоторые функции, такие как:

ggplot(data=data, aes(x=data$Value(by='data$Question'), y=data$Question)) + geom_boxplot()

или

ggplot(data=data, aes(x=data$Value~data$Question, y=data$Question)) + geom_boxplot()

, но все время вычисляются средние значения для целого столбца $ Value данных, без различения, какие значения ссылаются на какой вопрос. Как я могу сказать R, чтобы построить коробочный график так:

Пример

Заранее спасибо!

1 Ответ

0 голосов
/ 24 марта 2020

Попробуйте:

Стандартный блок-график:

ggplot(data, aes(Question, Value)) + 
    geom_boxplot() +
    coord_flip()

Mean-SD-Boxplot:

data%>% 
      group_by(Question) %>% 
      summarise(mean = mean(Value), sd = sd(Value)) %>% 
      ggplot(aes(x = Question, y = Value)) + 
      geom_crossbar(aes(ymin = mean - sd, ymax = mean + sd), size = .5, width = 0.5) + 
      geom_linerange(aes(ymin = mean - 2 * sd, ymax = mean - sd), size = .5) +
      geom_linerange(aes(ymin = mean + sd, ymax = mean + 2 * sd), size = .5) +
      coord_flip()

Использование mtcars в качестве примера данных:

library(ggplot2)
library(dplyr)

mtcars %>% 
  group_by(cyl) %>% 
  summarise(mean = mean(mpg), sd = sd(mpg)) %>% 
  ggplot(aes(x = factor(cyl), y = mean)) + 
  geom_crossbar(aes(ymin = mean - sd, ymax = mean + sd), size = .5, width = 0.5) + 
  geom_linerange(aes(ymin = mean - 2 * sd, ymax = mean - sd), size = .5) +
  geom_linerange(aes(ymin = mean + sd, ymax = mean + 2 * sd), size = .5) +
  coord_flip()

Создано в 2020-03-23 ​​с помощью представительного пакета (v0.3.0)

...