相当于ggplot2的boxplot中的'range'

时间:2013-09-03 14:40:34

标签: r ggplot2 boxplot outliers

我试图获取ggplot2的geom_boxplot的胡须来覆盖异常值。异常值事实上不会显示为点,因为它们包含在箱图中。

如果我使用标准的'boxplot',我会使用:

boxplot(x, range=n)

其中 n 是一个很大的数字,因此,不是显示异常值,而是使用箱形图的延伸来覆盖异常值。

如何使用ggplot2完成此操作? 我试过了:

ggplot(myDF, aes(x=x, y=y)) +
geom_boxplot(range = 5)

注意:我不想使用以下内容丢弃异常值:

geom_boxplot(outlier.shape = NA) 

2 个答案:

答案 0 :(得分:4)

我想,这个问题仍然具有相关性,因为谷歌搜索前三的这个页面关于那个异常值问题。所以:

处理异常值的更简单方法是(至少在2016年4月4日之前的最新ggplot中)使用" coef":

... + geom_boxplot(coef = 5)

从手册(?geom_boxplot 输出复制粘贴下面):

  

coef 胡须的长度是IQR的倍数。默认为1.5

     

<强>详情

     

上部晶须从铰链延伸到最高值   在铰链的1.5 * IQR范围内,其中IQR是四分位数间距,   或第一和第三四分位数之间的距离。较低的胡须   从铰链延伸到1.5 * IQR内的最低值   合页。超出胡须末端的数据是异常值并绘制为   点(由Tukey指定)。

     

在缺口框图中,凹口延伸1.58 * IQR / sqrt(n)。这个   给出了大约95.见McGill等人。 (1978)了解更多细节。

答案 1 :(得分:3)

我所知道的唯一方法是自己计算盒子值:

library(plyr)
xx <- ddply(mtcars,.(cyl),
            transform,
            ymin = min(mpg),
            ymax = max(mpg),
            middle = median(mpg),
            lower = quantile(mpg,0.25),
            upper = quantile(mpg,0.75))

ggplot(data = xx,aes(x = factor(cyl))) + 
    geom_boxplot(aes(ymin = ymin,ymax = ymax,middle = middle,upper = upper,lower= lower),
                 stat = 'identity')

ddply来电时有一些警告,但你应该可以安全地忽略它们。