boxplot只用于异常值

时间:2014-01-30 22:14:36

标签: r boxplot

问候语

我只想绘制boxplot的异常值 这是我的解决方案,但似乎不是非常有效或优雅。 用于执行该操作的任何包或更好的代码。 正如你所看到的,我正在两次调用boxplot来做到这一点 因此,如果我的数据集非常大,那么它就会很糟糕

由于

set.seed(1501)
y <- c(4, 0, 7, -5, rnorm(16))
x1 <- c("a", "a", "b", "b", sample(letters[1:5], 16, T))

lab_y <- sample(letters, 20)

datxx <- as.matrix(cbind(y,x1,lab_y))

boxplot_outlier<- function(dat){
bx <- boxplot(as.numeric(dat[,"y"]) ~ dat[,"x1"])

out_label <- c()
for ( i in seq(bx$out)){
out_label[i] <- dat[which(dat[,"y"]==bx$out[i]),"lab_y"]

}

out_label

out_g <- c()
for ( i in seq(bx$out)){
out_g[i] <- dat[which(dat[,"y"]==bx$out[i]),"x1"]

}

out_g


out_y <- c()
for ( i in seq(bx$out)){
out_y[i] <- dat[which(dat[,"y"]==bx$out[i]),"y"]

}

out_y

out_all<-cbind(out_y,out_g,out_label)
out_all <- as.matrix(out_all)

out_g <- as.matrix(out_g)

colnames(out_g)[1]<-"x1"

out_g_x <- out_g[which(!duplicated(out_g[,"x1"]))]

out_g_x <- as.matrix(out_g_x)

colnames(out_g_x)[1]<-"x1"

datsub <- merge(dat,out_g_x,by=c("x1"))

datsub <- as.matrix(datsub)

bx2 <- boxplot(as.numeric(datsub[,"y"]) ~ datsub[,"x1"],data=datsub)

mynum <- cbind(as.numeric(c(1:nrow(out_g_x))),out_g_x)
mynumxx <- merge(x=out_g,y=mynum,by=c("x1"))

colnames(mynumxx)[2]<-"v1"
text(as.numeric(mynumxx[,"v1"])+0.2,as.numeric(out_all[,"out_y"]),out_all[,"out_label"])


}

boxplot_outlier(datxx)

1 个答案:

答案 0 :(得分:2)

您可以使用ggplot2绘制并将框和线条设置为完全透明的颜色。请注意,您必须将数据放入data.frame中,无论如何都要好,因为y会在矩阵中转换为包含其他变量的字符。

dat <- data.frame(y,x1,lab_y)

ggplot(as.data.frame(dat), aes(x=x1,y=y)) + geom_boxplot(fill="#00000000",colour="#00000000")