如何让ggpubr的ggboxplot仅在X轴添加抖动而非Y轴
问题:ggpubr箱线图仅添加X轴抖动,Y轴保持真实数值
我希望使用ggpubr绘制箱线图并添加抖动效果,但默认的抖动会同时作用于Y轴,这会让观者产生混淆。
环境设置
library(ggpubr) library(tibble) df <- tibble( group = rep(c("Group1", "Group2", "Group3"), each = 10), value = sample(0:3, 30, replace = TRUE) # 生成30个重复抽样的样本 )
现有绘图代码及效果
默认抖动图(X、Y轴同时抖动)
ggboxplot(df, x = "group", y = "value", add = "jitter", color = "group", palette = "jco") + rremove("x.text") + rremove("xlab") + rotate_x_text(angle = 45)

点图(Y轴位置反映真实数值)
ggboxplot(df, x = "group", y = "value", add = "dotplot", color = "group", palette = "jco") + rremove("x.text") + rremove("xlab") + rotate_x_text(angle = 45)

解决方案:仅X轴添加抖动
要实现仅X轴抖动、Y轴保持真实数值的效果,有两种常用方法:
方法1:自定义add参数为geom_jitter并设置height=0
直接在ggboxplot中添加geom_jitter层,指定height=0关闭Y轴抖动,通过width调整X轴抖动幅度:
ggboxplot(df, x = "group", y = "value", color = "group", palette = "jco") + geom_jitter(aes(color = group), width = 0.2, height = 0) + # width可根据需求调整 rremove("x.text") + rremove("xlab") + rotate_x_text(angle = 45)
方法2:使用add.params参数控制抖动行为
继续使用add="jitter",通过add.params传入参数关闭Y轴抖动:
ggboxplot(df, x = "group", y = "value", add = "jitter", color = "group", palette = "jco", add.params = list(height = 0, width = 0.2)) + rremove("x.text") + rremove("xlab") + rotate_x_text(angle = 45)
这两种方法都能让抖动仅作用于X轴,Y轴的点严格对应真实的value数值,避免观者混淆。
内容的提问来源于stack exchange,提问作者flashton
相关产品推荐
相关产品推荐

