如何用点更改 ggplot2 箱线图颜色

Bin*_*ing 5 r ggplot2

解决了抖动问题,现在我想让点更加明显。我选择pch=21用黑色圆圈填充颜色。但是,这些盒子变成了相同的配色方案。如何改回盒子颜色?我希望图 A中的框颜色与图 B中的框颜色相同。

library(tidyverse)
library(ggpubr)
mtcars$cyl=factor(mtcars$cyl)

p1=mtcars %>% ggplot(aes(x=cyl, y=mpg, fill=cyl))+  
  geom_boxplot(show.legend = F, aes(fill=cyl))+
  geom_point(position=position_jitterdodge(jitter.width=2, dodge.width = 0), 
             pch=21, aes(fill=factor(wt)), show.legend = F)

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

ggarrange(p1,p2,labels=c("A","B"))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

小智 5

您可以使用scale_colour_manual()手动选择颜色。但是,此示例很难做到这一点,因为您使用的factor(wt)填充美学geom_point()大约有 30 个级别,因此您必须手动指定每个级别的颜色。为了演示,我已将填充美学更改为vs

p1=mtcars %>% ggplot(aes(x=cyl, y=mpg))+  
  geom_boxplot(show.legend = F, aes(fill=cyl))+
  geom_point(position=position_jitterdodge(jitter.width=2, dodge.width = 0), 
             pch=21, aes(fill=factor(vs)), show.legend = F) +
  scale_fill_manual(values = c("4" = "red",
                               "6" = "green",
                               "8" = "yellow",
                               "0" = "lightblue",
                               "1" = "black"))
p1
Run Code Online (Sandbox Code Playgroud)

输出


Bin*_*ing 2

我找到了一种使用 来做到这一点的方法ggpubr。首先,我需要手动定义颜色。然后,使用ggboxplot并添加jitter绘图,使用fill预定义的颜色指定颜色。看来ggpubr创建了一个单独的层,不会干扰主线剧情。

col=rainbow(length(levels(factor(mtcars$wt))))[factor(mtcars$wt)]

mtcars %>% ggboxplot(x="cyl", y="mpg", fill="cyl", add="jitter", 
        add.params=list(shape=21, color="black", fill=col, size=3))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述