例如,
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)但是失败了。

编辑:这不是ggplot2中Coloring boxplot异常点的重复吗?因为我真正需要的是与第一种颜色相反的颜色,而不仅仅是第二种颜色,所以我不想匹配美观的颜色。
我收回我的评论,您可以对此做些事情,并且将异常值绘制为单独的点。
首先,您将像往常一样制作箱线图并获取图层数据。
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)