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

对于每个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) 

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

出现csgillespie解决scheme的问题时,您有一个对数X轴。 你将有一个不同的右侧和左侧的小条(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") ) 

ggplot2的解决scheme:

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

在这里输入图像描述

您可以使用segments来添加基本graphics中的条形图。 这里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所指出的那样,我真的应该使用vector化函数调用:

 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) 

在这里输入图像描述

除了@ csgillespie的回答之外, segments也是vector化的,以帮助这样的事情:

 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) 

在这里输入图像描述

你可以使用arrows

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