ggplot2使用position参数时误差条与散点无法dodge问题求解
问题核心
你没有在aes()中指定dodge的分组变量model,position_dodge需要明确按什么维度拆分同一x轴位置的元素,没有分组的话所有同vars值的点和误差条都会被视为同一组,自然不会错开。你之前所有调整宽度的尝试都不会生效,因为根本逻辑缺失。
修正方案
给所有需要dodge的geom加上group=model的映射,同时保证geom_errorbar和geom_point使用同一个position_dodge对象,偏移参数完全一致,修正后的代码如下:
# 定义统一的dodge参数,保证点和误差条偏移量完全匹配 pd <- position_dodge(width = 0.6) TickLabels <- c("Average rainfall","Nyukura","Spinifex","Time-since-fire div") ggplot(Coeffs, aes(x = vars, y = Estimate, group = model)) + # 核心修改:添加分组映射 geom_hline(yintercept=0, lty=2, lwd=1, colour="black") + geom_errorbar( aes(ymin=Estimate-se, ymax=Estimate+se, colour=vars), lwd=1, width=0, position = pd ) + geom_point( size=3, aes(colour=vars), position = pd # 点也使用相同的dodge参数 ) + coord_flip()+ theme_classic()+ scale_color_viridis(discrete=TRUE,option="D") + scale_x_discrete(labels= TickLabels)+ theme( axis.title = element_text(size=18), axis.line = element_line(colour="black"), axis.ticks = element_line(), axis.text = element_text(size = 18, colour="black"), panel.border = element_blank(), legend.position = "none", title = element_text(size=22) ) + labs(x="", y="Estimate",title="Species richness")
可选优化
如果需要更清晰区分不同模型的系数,可以给点添加形状映射:把geom_point的aes改为aes(colour=vars, shape=model),同时可以删掉legend.position = "none"显示形状图例。
内容的提问来源于stack exchange,提问作者Leanne Greenwild
相关产品推荐
相关产品推荐

