用与 Boxplots 相同的颜色填充异常值 在 ggplot R 中填充颜色?

Fill outliers with same color as Boxplots Fill color in ggplot R?

我希望离群值以与箱线图填充颜色(不是轮廓)相同的颜色出现。我尝试了不同的方法,其中 none 行得通。非常感谢任何帮助。

ToothGrowth$dose <- as.factor(ToothGrowth$dose)
p <- ggplot(ToothGrowth, aes(x=dose, y=len))+
     geom_boxplot(width=0.3,aes(fill=dose),outlier.colour = NA)+
     geom_point()+
     scale_fill_manual(values=c("firebrick", "royalblue","yellow"))
p

我们可以将 outlier.shape 设置为“21”,这样它将继承填充颜色并绘制箱线图之前的点:

ToothGrowth$dose <- as.factor(ToothGrowth$dose)
ggplot(ToothGrowth, aes(x=dose, y=len))+
  geom_point()+
  geom_boxplot(width=0.3,aes(fill=dose),outlier.shape = 21)+
  scale_fill_manual(values=c("firebrick", "royalblue","yellow"))

它在图片中几乎不可见,但剂量为 0.5 时的离群值是红色的。


编辑 还要在框内显示点:

is_outlier <- function(x) {
  return(x < quantile(x, 0.25) - 1.5 * IQR(x) | x > quantile(x, 0.75) + 1.5 * IQR(x))
}

ToothGrowth %>% 
  group_by(dose) %>% 
  mutate(outlier = ifelse(is_outlier(len), as.numeric(NA), as.numeric(len))) %>% 
ggplot(aes(x=dose, y=len))+
  geom_boxplot(width=0.3,aes(fill=dose),outlier.shape = 21)+
  geom_point(aes(x = dose, y = outlier))+
  scale_fill_manual(values=c("firebrick", "royalblue","yellow"))