在ggplot中包含极端异常值的指示

时间:2015-04-05 22:45:50

标签: r ggplot2 outliers

我的数据集中有一些非常非常少的异常值,因此箱形图难以阅读:

library(ggplot2)
mtcars$mpg[1] <- 60
p <- ggplot(mtcars, aes(factor(cyl), mpg))
p + geom_boxplot()

enter image description here

因此,我想指出像这样的极端异常值:

enter image description here

有关如何在ggplot2中执行此操作的任何想法?转换轴不是我的选择......

1 个答案:

答案 0 :(得分:8)

这是一个开始:

library("ggplot2")
mtcars$mpg[1:2] <- c(50,60)
p <- ggplot(mtcars, aes(factor(cyl), mpg))
p + geom_boxplot()

定义最大值:

maxval <- 40

使用dplyr(也可以在基础R或plyr中完成)来提取异常值并将文本字符串放在一起:

library("dplyr")
dd <- mtcars %>% filter(mpg>maxval) %>%
    group_by(cyl) %>%
        summarise(outlier_txt=paste(mpg,collapse=","))

设置最大值并添加箭头加标签:

library("grid") # needed for arrow() function
p2 <- p + geom_boxplot() +
    scale_y_continuous(limits=c(min(mtcars$mpg),maxval))+
       geom_text(data=dd,aes(y=maxval,label=outlier_txt),
                 size=3,vjust=1.5,hjust=-0.5)+
          geom_segment(data=dd,aes(y=maxval*0.95,yend=maxval,
                       xend=factor(cyl)),
                 arrow = arrow(length = unit(0.1,"cm")))
p2

enter image description here