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

时间:2018-09-25 20:35:04

标签: r ggplot2 colors boxplot jitter

我绘制了一个箱形图+点。我想为这些点添加颜色。 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"))

ggplot sample

2 个答案:

答案 0 :(得分:3)

在p1中,这些点不仅抖动,而且还被factor(wt)闪避。如果只想抖动,请在dodge.width = 0中设置position_jitterdodge

答案 1 :(得分: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)

这最终将内联,但现在有一个链接:color_and_jitter