5

我试图让 ggplot2 的 geom_boxplot 的胡须覆盖异常值。异常值实际上不会显示为点,因为它们被箱线图包围。

如果我使用标准的“箱线图”,我将使用:

boxplot(x, range=n)

其中n将是一个很大的数字,因此箱线图的胡须不会显示异常值,而是会延伸以覆盖异常值。

ggplot2如何做到这一点?我试过了:

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

注意:我不想使用以下方法丢弃异常值:

geom_boxplot(outlier.shape = NA) 
4

2 回答 2

7

我想,这个问题仍然是相关的,因为这个页面在谷歌搜索的前 3 名中关于那个异常值问题。所以:

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

... + geom_boxplot(coef = 5)

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

晶须的系数 长度为 IQR 的倍数。默认为 1.5

细节

上须线从铰链延伸到铰链 1.5 * IQR 内的最大值,其中 IQR 是四分位数间距,或第一和第三四分位数之间的距离。下须从铰链延伸到铰链 1.5 * IQR 内的最小值。超出胡须末端的数据是异常值并绘制为点(由 Tukey 指定)。

在缺口箱线图中,缺口延伸 1.58 * IQR / sqrt(n)。这给出了大约 95 参见 McGill 等人。(1978 年)了解更多详情。

于 2016-04-04T13:54:43.993 回答
4

我知道的唯一方法是自己计算框值,如下所示:

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,但您应该能够安全地忽略它们。

于 2013-09-03T14:50:06.503 回答