如何更改 boxplot() 中某个类别的异常值的颜色?

How to change the color of outliers of certain category in boxplot()?

简单地说,我想给异常值上色,但前提是它们属于特定类别,即我想要

boxplot(mydata[,2:3], col=c("chartreuse","gold"), outcol="red")

red 仅适用于 mydata[,1]M 的那些元素。

outcol 似乎只为每个变量(框)指定了一种颜色。但是,您可以使用 points 以任何您想要的方式叠加单个点。您需要计算出用于绘图的相关 x 和 y 坐标。当您使用 boxplot(mydata[,2:3]) 之类的语句制作箱线图时,第一个变量(第 2 列)绘制在 x=1 处,第二个变量(第 3 列)绘制在 x=2 处。通过捕获 boxplot 的 return 值,您可以计算出 y 值。由于您没有提供任何数据,我将使用随机生成的数据进行说明。

## Data
set.seed(42)
NumPts = 400
a = rnorm(NumPts)
b = rnorm(NumPts)
c = rnorm(NumPts)
CAT = sample(c("M", "N"), NumPts, replace=T)
mydata = data.frame(a,b,c, CAT)

## Find outliers
BP = boxplot(mydata[,2:3], col=c("chartreuse","gold"))
OUT2 = which(mydata[,2] %in% BP$out)
OUT3 = which(mydata[,3] %in% BP$out)

## Find outliers with category == M
M_OUT2 = OUT2[which(mydata$CAT[OUT2] == "M")]
M_OUT3 = OUT3[which(mydata$CAT[OUT3] == "M")]

## Plot desired points
points(rep(1, length(M_OUT2)),mydata[M_OUT2, 2], col="red")
points(rep(2, length(M_OUT3)),mydata[M_OUT3, 3], col="red")