添加geom_segments后调整geom_violin图的轴间距与组间距
解决方法
针对你遇到的两个问题,直接调整代码即可,关键修改点如下:
缩小小提琴与y轴的间距:
添加geom_segment后,因为线段用到了x=0和x=3,ggplot自动扩展了x轴范围,导致小提琴图远离y轴。通过coord_cartesian()手动限定x轴的可视范围,既能完整显示线段,又能让小提琴图贴近y轴。增大组内小提琴图的间距:
给geom_violin设置position = position_dodge(width = 0.8)(可根据需求调整width数值),让同一Condition下的A、B、C三个小提琴图之间的间距变大。
修改后的完整代码
classes = c('A','B','C') meanCond1 = 0 meanCond2 = 2 n_size = 50 finalRes1 = NULL for(id in classes){ tmp_df = rnorm(n = n_size,mean = meanCond1, sd = 1) tmp_res = data.frame(type = 'Condition1', value = tmp_df,model = id) finalRes1 = rbind(finalRes1,tmp_res) } finalRes2 = NULL for(id in classes){ tmp_df = rnorm(n = n_size,mean = meanCond2, sd = 1) tmp_res = data.frame(type = 'Condition2', value = tmp_df,model = id) finalRes2 = rbind(finalRes2,tmp_res) } finalTot = rbind(finalRes1,finalRes2) finalTot$type = as.factor(finalTot$type) # 调整后的带线段小提琴图 plotWithSegmentFixed = ggplot(finalTot, aes(x = type, y = value, fill = model)) + geom_violin(draw_quantiles = c(0.05, 0.95), position = position_dodge(width = 0.8)) + # 增大组内小提琴间距 geom_segment(aes(x = 0, y = 1.5, xend = 1.5, yend = 1.5), color = '#023047',linetype = 'dashed', linewidth = 1)+ geom_segment(aes(x = 3, y = 2.5, xend = 1.5, yend = 2.5), color = '#023047',linetype = 'dashed', linewidth = 1)+ scale_x_discrete(expand = c(0,0))+ coord_cartesian(xlim = c(0.2, 2.8)) + # 限定x轴可视范围,缩小小提琴与y轴间距 ylab('')+xlab('')+ theme_bw() plotWithSegmentFixed
额外说明
- 若需要更精细调整x轴范围,直接修改
coord_cartesian中的xlim参数即可,比如把0.2改小或2.8改大,平衡线段显示和小提琴位置。 position_dodge的width值可按需调整,数值越大,同一Condition下的小提琴间距越宽。
内容的提问来源于stack exchange,提问作者CaffèSospeso
相关产品推荐
相关产品推荐

