ggplot2中geom_dotplot()无法区分Year因子水平导致点堆叠异常的解决方法咨询
解决ggplot箱线图中geom_dotplot的点分组对齐问题
我懂你遇到的困扰啦——当你用fill=Year让每个保护等级下的箱线图分成2020和2021两组时,geom_dotplot的样本点却没跟着分组,全都挤在一块儿了,完全对应不上各自年份的箱线,对吧?
其实问题出在geom_dotplot默认不会自动匹配箱线图的分组偏移,咱们只需要给它加上位置调整的参数,就能让点和对应的箱线完美对齐了。
修改后的完整代码
set.seed(100) df <- data.frame(Year=as.factor(c(rep(2020,18),rep(2021,18))), Prot=c(rep(c("NP","PP","FP"),each=6,2)), Depth=c(rep(c("Shallow","Deep"),each=3,6)), Density=c(runif(n = 36, min = 1, max = 20))) # 调整后的绘图代码 Plot <- ggplot(df, aes(x=Prot, y=Density)) + # 给箱线图明确设置dodge宽度,方便后续点对齐 geom_boxplot(aes(fill=Year), position = position_dodge(width = 0.75)) + geom_dotplot( aes(fill=Year), binaxis = "y", binwidth=0.7, drop=FALSE, stackdir = "center", dotsize = 0.5, # 关键:让点和箱线使用相同的dodge宽度,实现分组对齐 position = position_dodge(width = 0.75) ) + xlab("Protection Level") + ylab("Density") + facet_wrap(~Depth) Plot
关键调整说明
- 给
geom_boxplot添加position = position_dodge(width = 0.75):这是ggplot箱线图分组的默认偏移宽度,明确设置后能让后续点的对齐更精准 - 给
geom_dotplot也加上完全相同的position = position_dodge(width = 0.75):这个参数会让每个年份的点跟着对应年份的箱线一起偏移,这样2020和2021的点就不会再堆叠到同一个位置了
如果觉得点和箱线的间距不合适,你可以微调width的数值(比如改成0.8或者0.7),直到视觉效果满意为止。
内容的提问来源于stack exchange,提问作者Dekike
相关产品推荐
相关产品推荐

