ggplot geom_point position_jitterdodge 在指定颜色时不起作用?

ggplot geom_point position_jitterdodge not working when color specified?

我绘制了箱线图+点。我想为点添加颜色。 position_jitterdodge 在没有颜色的情况下工作正常,如图 B 所示,点很接近,这是我打算做的。但是当我尝试为点添加颜色时,jitter.width 参数不再起作用(图 A)。点相距太远。我为 jitter.width 尝试了不同的数字,但没有用。我该如何解决这个问题?

library(tidyverse)
library(ggpubr)
mtcars$cyl <- factor(mtcars$cyl)

p1 <- mtcars %>% ggplot(aes(x = cyl, y = mpg, fill = cyl)) +  
  geom_boxplot() +
  geom_point(position = position_jitterdodge(jitter.width = 0.2),
             aes(color = factor(wt)), show.legend = FALSE)

p2 <- mtcars %>% ggplot(aes(x = cyl, y = mpg, fill = cyl)) +  
  geom_boxplot() +
  geom_point(position = position_jitterdodge(jitter.width = 0.2))

ggarrange(p1, p2, labels = c("A", "B"))

在p1中,点不仅抖动了,还被factor(wt)躲开了。如果只想要抖动,在position_jitterdodge.

中设置dodge.width = 0

看起来问题在于这些点具有离散的 color 美感,但没有 group 美感。如果您想通过离散变量保持着色,请将 group = cyl 添加到 geom_point 层的美学中。如果您使用另一个数据集进行绘图,则分组变量将与您沿 x 轴绘制的变量相同。

一个问题:在应用分组时必须增加 jitter.width 才能使其可见。我不得不在这里把它从 0.2 调高到 3。

另一种选择是按连续变量着色。

library(tidyverse)
library(ggpubr)

mtcars$cyl=factor(mtcars$cyl)

p3=mtcars %>% ggplot(aes(x=cyl, y=mpg, fill=cyl))+  
  geom_boxplot()+
  geom_point(aes(color = factor(wt), group = cyl),
         position=position_jitterdodge(jitter.width=0.2),
         show.legend = F)

p4=mtcars %>% ggplot(aes(x=cyl, y=mpg, fill=cyl))+  
  geom_boxplot()+
  geom_point(aes(color = wt),
         position=position_jitterdodge(jitter.width=0.2),
         show.legend = F)

ggarrange(p3, p4)

这最终会呈现内联,但现在 link:color_and_jitter