添加误差线以显示R中绘图的标准偏差

Joh*_*eth 30 statistics plot r standard-deviation errorbar

对于每个X值,我计算了每个Y值的平均值Y和标准偏差(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)
Run Code Online (Sandbox Code Playgroud)

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

jub*_*uba 29

解决方案ggplot2:

qplot(x,y)+geom_errorbar(aes(x=x, ymin=y-sd, ymax=y+sd), width=0.25)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


the*_*ail 22

除了@ 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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


小智 21

你可以使用arrows:

arrows(x,y-sd,x,y+sd, code=3, length=0.02, angle = 90)
Run Code Online (Sandbox Code Playgroud)

  • 这个答案比涉及“段”的答案要好。更简单,并且即使x轴在对数刻度上也可以工作(这将导致使用`segments`的解决方案在左侧和右侧绘制不同的长度)。 (2认同)

csg*_*pie 20

您可以使用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)
}
Run Code Online (Sandbox Code Playgroud)

正如@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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


R_U*_*ser 18

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

你应该更好地使用包中的errbar函数Hmisc:

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")
)
Run Code Online (Sandbox Code Playgroud)