解决了抖动问题,现在我想让点更加明显。我选择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)
我找到了一种使用 来做到这一点的方法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)