geom_boxplot,如何根据组仅对异常值进行着色,并使所有内容保持黑色?

Ahd*_*dee 2 r ggplot2

例如,

ggplot(mpg, aes(class, hwy)) + geom_boxplot(
                 outlier.colour = "black",
                 outlier.shape = 24,
                 outlier.fill = "red",
                 outlier.size = 3
) 
Run Code Online (Sandbox Code Playgroud)

根据示例,我知道对于紧凑级而言,所有离群值都来自大众或丰田

mpg[mpg$class == "compact" & mpg$hwy > 35, ]
Run Code Online (Sandbox Code Playgroud)

这样,不是要把所有离群值都标记为红色,我只想让离群值由制造商进行颜色编码?我可以吗?我尝试了类似的方法,outlier.fill = factor ( mpg$manufacturer)但是失败了。
在此处输入图片说明

编辑:这不是ggplot2Coloring boxplot异常点的重复吗?因为我真正需要的是与第一种颜色相反的颜色,而不仅仅是第二种颜色,所以我不想匹配美观的颜色。

teu*_*and 6

我收回我的评论,您可以对此做些事情,并且将异常值绘制为单独的点。

首先,您将像往常一样制作箱线图并获取图层数据。

g <- ggplot(mpg, aes(class, hwy)) + geom_boxplot()

ld <- layer_data(g)
Run Code Online (Sandbox Code Playgroud)

现在,您将原始数据分割为与x轴相同的变量,并使用箱线图数据找出哪些数据点是异常值。

split <- split(mpg, mpg$class)

outliers <- lapply(seq_along(split), function(i) {
  box <- ld[ld$group == i, ]
  data <- split[[i]]
  data <- data[data$hwy > box$ymax | data$hwy < box$ymin, ]
  data
})
outliers <- do.call(rbind, outliers)
Run Code Online (Sandbox Code Playgroud)

然后,将箱线图和点绘制为不同的图层,并对点进行通常的控制:

ggplot(mpg, aes(class, hwy)) +
  geom_boxplot(outlier.shape = NA) +
  geom_point(data = outliers, aes(colour = manufacturer))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明