ggplot2添加误差棒时出现分组条形重叠问题求助
ggplot2添加误差棒时出现分组条形重叠问题求助
嗨,我来帮你解决这个问题~
你遇到的误差棒重叠问题,核心原因是你的geom_errorbar没有和条形图使用相同的position_dodge设置,导致误差棒没有跟着分组条形错开位置,自然就重叠在一起了。
先帮你把数据和初始代码理清楚(方便复现,注意你原代码里的mdta.summary.NZ应该是msumNZ吧?):
# 构建数据框 msumNZ <- data.frame( Habitat = c(rep("Core", 6), rep("Wild", 6)), Parameter = rep(c("AlertForaging", "Foraging", "NA_OutOfSight ", "Other", "Social", "Vigilance"),2), mCounts = c(4.23, 5.74, 3.48, 4.93, 2.65, 4.31, 3.68, 5.9, 3.94, 3.82, 2.94, 4.83), sd = c(3.63, 3.41, 2.73, 3.82, 1.93, 3.15, 1.93, 3.23, 3.32, 3.67, 2.15, 3.24) ) # 初始绘图代码 ggplot(msumNZ, aes(x = Parameter, y = mCounts, fill = Habitat)) + geom_bar(stat = "identity", position = position_dodge())
接下来修改误差棒的代码,只需要给geom_errorbar也加上和条形图一致的position_dodge参数,并且最好指定一个明确的数值(比如0.9,和默认的条形图dodge宽度匹配),这样误差棒就能精准对应到每个分组条形的位置了:
ggplot(msumNZ, aes(x = Parameter, y = mCounts, fill = Habitat)) + geom_bar(stat = "identity", position = position_dodge(0.9)) + # 明确指定dodge宽度 geom_errorbar(aes(ymin = mCounts - sd, ymax = mCounts + sd, width = 0.2), position = position_dodge(0.9)) # 这里必须和bar的position_dodge数值一致
另外我把误差棒的ymin改成了mCounts - sd,这样误差棒是上下对称的(你原来只加了上方的误差,如果只需要单侧的话,改回ymin = mCounts就行)。
为什么要这么做?因为position_dodge()默认的宽度是0.9,当你给条形图设置了这个参数后,误差棒必须使用相同的宽度才能对齐,否则它会默认在每个x轴位置的中心绘制,就会和两个分组的条形重叠。
这样修改后,每个分组的误差棒就会对应到各自的条形上方/下方,不会再重叠啦~
备注:内容来源于stack exchange,提问作者LDBerriz
相关产品推荐
相关产品推荐

