ggplot2中geom_boxplot叠加带shape映射的geom_point位置错位如何解决
问题原因
在geom_point的美学映射中新增shape参数后,ggplot2会默认将所有离散型美学映射变量(原有的fill+新增的shape)的组合作为分组依据。此时position_jitterdodge()会按照新的多变量分组规则执行避让,和仅按fill分组的箱线图避让规则不匹配,最终导致散点和对应箱线图错位。
修复方案
可任选以下任意一种方式修复:
- 显式指定
geom_point的group映射为与箱线图一致的fill变量,强制散点按箱线图的分组规则执行避让:
set.seed(1) ggplot(data, aes(x, y, fill = fill)) + geom_boxplot() + geom_point(aes(shape = shape, group = fill), position=position_jitterdodge())
- 手动指定
position_jitterdodge的dodge.width参数,与箱线图默认的避让宽度(默认值为0.75)对齐,确保散点避让幅度和箱线图一致:
set.seed(1) ggplot(data, aes(x, y, fill = fill)) + geom_boxplot() + geom_point(aes(shape = shape), position=position_jitterdodge(dodge.width = 0.75))
内容的提问来源于stack exchange,提问作者Shixiang Wang
相关产品推荐
相关产品推荐

