在R语言中无需外部库,能否为带正态曲线的直方图添加±error值的误差棒?
回答
当然可以!完全不需要借助任何外部库,用R基础绘图工具就能给你的直方图加上基于±error值的误差棒。我会基于你提供的代码修改,并详细说明每一步:
修改后的完整代码
# 导入数据 data <- diameters$V1 error <- 0.005 # 单位:mm # 绘制直方图 h <- hist(data, breaks = "FD", density = 10, col = "lightblue", xlab = "直径", main = "整体直径分布") # 生成正态拟合曲线 xfit <- seq(min(data), max(data), length = 40) yfit <- dnorm(xfit, mean = mean(data), sd = sd(data)) yfit <- yfit * diff(h$mids[1:2]) * length(data) # 绘制正态曲线 lines(xfit, yfit, col = "black", lwd = 2) # 用基础R的arrows()函数添加误差棒 # 这里给每个直方图柱子顶部添加水平误差棒(对应直径的测量误差) arrows(x0 = h$mids - error, y0 = h$counts, x1 = h$mids + error, y1 = h$counts, code = 3, angle = 90, length = 0.05, col = "red", lwd = 1.5)
关键部分解释
- 我们用R自带的
arrows()函数实现误差棒,完全不需要安装任何外部库 - 参数细节:
x0和x1:设置误差棒的左右端点,基于每个柱子的中心h$mids分别减去/加上error值,刚好对应你给定的±0.005mm误差y0和y1:都设为柱子的顶部高度h$counts,这样误差棒是水平的,契合直径测量误差的场景code = 3:让误差棒两端都显示短横线(也就是误差帽)angle = 90:让误差帽和误差棒垂直,看起来更规范length = 0.05:控制误差帽的长度,你可以根据图表大小调整这个值col和lwd:设置误差棒的颜色和粗细,方便和直方图、拟合曲线区分开
可选:垂直误差棒(如果需要)
要是你需要的是垂直方向的误差棒(比如基于计数的误差),只需要调整arrows()的参数即可:
# 垂直误差棒示例 arrows(x0 = h$mids, y0 = h$counts - error, x1 = h$mids, y1 = h$counts + error, code = 3, angle = 90, length = 0.05, col = "blue", lwd = 1.5)
内容的提问来源于stack exchange,提问作者Anson Biggs
相关产品推荐
相关产品推荐

