使用 ggplot2 在箱线图上叠加抖动点

Overlaying jittered points on boxplot conditioned by a factor using ggplot2

我正在制作箱线图,条件是类似于此示例的因素:

p <- ggplot(mtcars, aes(factor(cyl), mpg))
p + geom_boxplot(aes(fill = factor(am)))

数据集中的点很少,我想通过叠加数据点来直观地表达这一点。我想覆盖由相同因素 "am" 着色的点,我尝试这样做:

p + geom_boxplot(aes(fill = factor(am))) + geom_jitter(aes(colour = factor(am)))

这些点由 "am" 因素着色,但没有间隔以仅位于与其关联的箱线图上。相反,它们混合并涵盖了两者。 有谁知道 geom_jitter 的条件如何使这些点与 "am" 因素相关联?

欢迎来到 SO!这是我的尝试。这有点笨拙,但可以完成工作。诀窍是将 x 映射到具有手动构造的偏移量的虚拟变量。我正在添加填充比例以突出显示点定位。

mtcars$cylpt <- as.numeric(factor(mtcars$cyl)) + ifelse(mtcars$am == 0, -0.2, 0.2)
ggplot(mtcars, aes(factor(cyl), mpg)) + 
  geom_boxplot(aes(fill = factor(am))) + 
  geom_point(aes(x = cylpt, colour = factor(am)), position = "jitter") +
  scale_fill_manual(values = c("white", "gray"))

我发现 link 可以解决您的问题:

https://datavizpyr.com/how-to-make-grouped-boxplot-with-jittered-data-points-in-ggplot2/

geom_jitter(位置=position_jitterdodge())