ggplot调整X轴因子排序后误差棒与Y轴对应数值不匹配问题
问题解决方法
错误原因
- 你在管道操作中修改了
X列的因子顺序,但ggplot()中显式传入了未修改的原始Kale_Nutrients数据集,管道处理后的临时结果没有被ggplot生效使用。另外你写的arrange(X)仅会调整行顺序,不会修改因子的内在分类排序,属于冗余代码,调整X轴分类顺序只需指定factor的levels参数即可。 geom_errorbar中直接通过$调用原始数据集的列,取值顺序为原始数据集的行顺序,和调整因子顺序后的X轴分类顺序不匹配,自然会出现误差棒偏移的问题。
修正方案
直接沿用管道传递的处理后数据集,且geom_errorbar中直接引用列名即可,无需绑定原始数据集:
Kale_Nutrients %>% mutate(X = factor(X, levels=c( "Control", "B1 <2mm 5%", "B1 <2mm 10%", "B1 <2mm 20%", "B1 >2mm 5%", "B1 >2mm 10%", "B1 >2mm 20%", "B2 <2mm 5%", "B2 <2mm 10%","B2 <2mm 20%", "B2 >2mm 5%", "B2 >2mm 10%", "B2 >2mm 20%", "B3 <2mm 5%", "B3 <2mm 10%", "B3 <2mm 20%", "B3 >2mm 5%", "B3 >2mm 10%", "B3 >2mm 20%"))) %>% ggplot(aes(X, P))+ geom_point()+ theme_classic()+ theme(axis.text.x=element_text(angle=90, size=12, color="black"),panel.grid.major = element_blank(), panel.grid.minor = element_blank(),panel.background = element_blank(),axis.line = element_line(colour = "black"),axis.text.y=element_text( size=14, color="black"),axis.title=element_text(size=14, face="bold"))+ geom_errorbar(ymin = P - P.s.e , ymax = P + P.s.e)+ ylim(0,4000)
可选写法
如果你希望显式给ggplot传入数据集,需要先把调整因子顺序后的结果赋值覆盖原始数据集,再绘图:
# 先修改原始数据集的X列因子顺序 Kale_Nutrients <- Kale_Nutrients %>% mutate(X = factor(X, levels=c( "Control", "B1 <2mm 5%", "B1 <2mm 10%", "B1 <2mm 20%", "B1 >2mm 5%", "B1 >2mm 10%", "B1 >2mm 20%", "B2 <2mm 5%", "B2 <2mm 10%","B2 <2mm 20%", "B2 >2mm 5%", "B2 >2mm 10%", "B2 >2mm 20%", "B3 <2mm 5%", "B3 <2mm 10%", "B3 <2mm 20%", "B3 >2mm 5%", "B3 >2mm 10%", "B3 >2mm 20%"))) # 再绘图 ggplot(Kale_Nutrients,aes(X, P))+ geom_point()+ theme_classic()+ theme(axis.text.x=element_text(angle=90, size=12, color="black"),panel.grid.major = element_blank(), panel.grid.minor = element_blank(),panel.background = element_blank(),axis.line = element_line(colour = "black"),axis.text.y=element_text( size=14, color="black"),axis.title=element_text(size=14, face="bold"))+ geom_errorbar(ymin = P - P.s.e , ymax = P + P.s.e)+ ylim(0,4000)
内容的提问来源于stack exchange,提问作者Charlotte Tutton
相关产品推荐
相关产品推荐

