R语言ggplot2绘图各子图误差条位置异常如何修复?
问题原因
误差条错位的核心是geom_bar和geom_errorbar的位置偏移参数不匹配导致的,分两种场景对应解决方案如下:
场景1:单组柱状图(每个Treatment仅对应1行养分值
你当前给geom_errorbar额外添加了position=position_dodge(0.9)参数,该参数的作用是给分组柱状图的误差条设置横向偏移,单组场景下使用会强制让误差条偏离对应柱子的正确位置,直接删除该参数即可。
修改后单组柱状图代码示例(以P元素图为例):
Pbar<-ggplot(Nutrient_soil,)+ geom_bar(aes(x=Treatment, y=P),stat="identity")+ theme_classic()+ theme(axis.text.x=element_text(angle=90, size=8, color="black"))+ geom_errorbar(aes(x=Treatment,ymin=P-p.s.e, ymax=P+p.s.e),width=0.3)+ ylab("P (mg/kg)")
其余K、Ca、Mg元素的子图做同样修改,删除geom_errorbar中的position=position_dodge(0.9)参数即可。
场景2:分组柱状图(每个Treatment对应多个分组,比如不同生物质炭类型、施用量等)
你需要将分组变量加入绘图映射中,同时给geom_bar和geom_errorbar设置完全一致的位置偏移参数,保证柱子和误差条偏移量统一就不会出现错位。修改示例(以按Char.Type分组为例):
Pbar<-ggplot(Nutrient_soil,)+ geom_bar(aes(x=Treatment, y=P, fill=Char.Type),stat="identity", position=position_dodge(0.9))+ theme_classic()+ theme(axis.text.x=element_text(angle=90, size=8, color="black"))+ geom_errorbar(aes(x=Treatment,ymin=P-p.s.e, ymax=P+p.s.e, group=Char.Type),width=0.3, position=position_dodge(0.9))+ ylab("P (mg/kg)")
内容的提问来源于stack exchange,提问作者Charlotte Tutton
相关产品推荐
相关产品推荐

