添加误差线以在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)