r 中的箱线图 - 如何绘制具有两列的图(一列的值指的是不同的类别)

Boxplot in r - how to plot having two columns (one with values referring to different categories)

所以我想绘制一个箱线图。我有 10 个问题,200 个人回答了这 10 个问题。我根据这些数据对两列进行了编码。一列包含值(从 1 到 7 - 每个参与者对给定问题给出的答案),第二列包含每个问题的名称(第一个 200 次,第二个 200 次,第三个 200 次,依此类推) .所以它看起来像这样:

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

我一直在尝试使用 ggplot 绘制箱线图,但主要问题是我想在 y 轴上显示问题名称,在 x 轴上显示均值和 SD,但均值应该是仅指给定的问题(即,我想在图中显示所有参与者回答第一、第二等问题的均值)。我尝试使用一些功能,例如:

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()

但一直在为整个 data$Value 列计算均值,而不区分哪些值指的是哪个问题。我如何告诉 R 绘制这样的箱线图:

Example

提前致谢!

试试这个:

标准箱线图:

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

均值-SD-箱线图:

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()

reprex package (v0.3.0)

于 2020-03-23 创建