【问题标题】:Add error bars to show standard deviation on a plot in R添加误差线以在 R 中的绘图上显示标准偏差
【发布时间】:2013-02-10 09:06:12
【问题描述】:

对于每个 X-value,我计算了每个 Y 值的平均值 Y-value 和标准差 (sd)

x  = 1:5
y  = c(1.1, 1.5, 2.9, 3.8, 5.2)
sd = c(0.1, 0.3, 0.2, 0.2, 0.4)

plot (x, y)

如何使用标准差为绘图的每个数据点添加误差线?

【问题讨论】:

  • 另见plotrix::plotCI

标签: r plot statistics standard-deviation errorbar


【解决方案1】:

ggplot2 的解决方案:

qplot(x,y)+geom_errorbar(aes(x=x, ymin=y-sd, ymax=y+sd), width=0.25)

【讨论】:

  • 设置 geom_errorbar(width = 0) 会从误差线两端移除大写字母。知道如何仅在错误栏的一侧完成此操作吗?谢谢
【解决方案2】:

除了@csgillespie 的回答,segments 也被矢量化以帮助解决此类问题:

plot (x, y, ylim=c(0,6))
segments(x,y-sd,x,y+sd)
epsilon <- 0.02
segments(x-epsilon,y-sd,x+epsilon,y-sd)
segments(x-epsilon,y+sd,x+epsilon,y+sd)

【讨论】:

    【解决方案3】:

    你可以使用arrows:

    arrows(x,y-sd,x,y+sd, code=3, length=0.02, angle = 90)
    

    【讨论】:

    • 这个答案比涉及segments的答案好;更简单,即使 x 轴在对数刻度上也可以工作(这会导致使用 segments 的解决方案在左侧和右侧绘制不同的长度)。
    • @SmartCH,我如何按矩阵的行计算四分位数,然后按上述方式绘制四分位数和平均值?
    【解决方案4】:

    您可以使用segments 在基本图形中添加条形图。这里epsilon控制着横过上下线的线。

    plot (x, y, ylim=c(0, 6))
    epsilon = 0.02
    for(i in 1:5) {
        up = y[i] + sd[i]
        low = y[i] - sd[i]
        segments(x[i],low , x[i], up)
        segments(x[i]-epsilon, up , x[i]+epsilon, up)
        segments(x[i]-epsilon, low , x[i]+epsilon, low)
    }
    

    正如@thelatemail 指出的那样,我真的应该使用矢量化函数调用:

    segments(x, y-sd,x, y+sd)
    epsilon = 0.02
    segments(x-epsilon,y-sd,x+epsilon,y-sd)
    segments(x-epsilon,y+sd,x+epsilon,y+sd)
    

    【讨论】:

      【解决方案5】:

      当您有一个对数 X 轴时,会出现 csgillespie 解决方案的问题。您将在右侧和左侧有不同长度的小条(epsilon 遵循 x 值)。

      您最好使用Hmisc 包中的errbar 函数:

      d = data.frame(
        x  = c(1:5)
        , y  = c(1.1, 1.5, 2.9, 3.8, 5.2)
        , sd = c(0.2, 0.3, 0.2, 0.0, 0.4)
      )
      
      ##install.packages("Hmisc", dependencies=T)
      library("Hmisc")
      
      # add error bars (without adjusting yrange)
      plot(d$x, d$y, type="n")
      with (
        data = d
        , expr = errbar(x, y, y+sd, y-sd, add=T, pch=1, cap=.1)
      )
      
      # new plot (adjusts Yrange automatically)
      with (
        data = d
        , expr = errbar(x, y, y+sd, y-sd, add=F, pch=1, cap=.015, log="x")
      )
      

      【讨论】:

        猜你喜欢
        • 2017-03-16
        • 2011-12-14
        • 2015-03-30
        • 1970-01-01
        • 1970-01-01
        • 2019-12-04
        • 1970-01-01
        • 1970-01-01
        • 2018-10-08
        相关资源
        最近更新 更多