【发布时间】:2019-11-30 11:28:18
【问题描述】:
简单地说,我想为异常值着色,但前提是它们属于特定类别,即我想要
boxplot(mydata[,2:3], col=c("chartreuse","gold"), outcol="red")
但red 仅适用于mydata[,1] 为M 的元素。
【问题讨论】:
简单地说,我想为异常值着色,但前提是它们属于特定类别,即我想要
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 的返回值,您可以计算出 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")
【讨论】: