【问题标题】:Boxplot in r - how to plot having two columns (one with values referring to different categories)r 中的箱线图 - 如何绘制具有两列的图(一列具有引用不同类别的值)
【发布时间】:2020-03-23 20:56:36
【问题描述】:

所以我想绘制一个箱线图。我有 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

提前致谢!

【问题讨论】:

    标签: r boxplot two-columns


    【解决方案1】:

    试试这个:

    标准箱线图:

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

    平均标准差箱线图:

    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 创建

    【讨论】:

    • 天哪,过去三个小时我一直在努力获得这样的结果...... Stefan,你是个天才 :)) 也许你也可以了解如何替换中位数和四分位数,并使用均值和标准差作为箱线图??
    • 好的。我懂了。我认为在这种情况下我们必须使用 geom_crossbar。我去看看。
    • 好的。看一看。 1. 使用 summarise 计算均值和标准差。 2. 使用 geom_crossbar 和两次 geom_linerange 构建 Mean-SD-Boxplot。我有线条,以便从平均值 - 2 * sd 到平均值 + 2 * sd 的跨度。对我来说,如果情节比四分位间距更有意义。
    猜你喜欢
    • 2014-07-16
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多