ggplot2中boxplot的等效函数是什么?

6

我正在尝试让ggplot2的geom_boxplot的whiskers覆盖离群值。由于离群值被包含在箱线图中,它们实际上不会显示为点。

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

boxplot(x, range=n)

n设置为一个大的数字,这样箱线图的触须将覆盖异常值而不是显示它们。

如何在ggplot2中实现? 我尝试了:

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

注意:我不想使用像以下代码一样的方法来 丢弃 异常值:
geom_boxplot(outlier.shape = NA) 
2个回答

9

我想这个问题仍然很重要,因为这个页面是谷歌搜索关于异常值问题的前三名。所以:

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

... + geom_boxplot(coef = 5)

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

coef 以IQR倍数的长度表示须茎。默认为1.5

详情

上端须茎从箱线图的箱体到距离下四分位距(IQR) 1.5*IQR 的最大值处延伸,其中IQR是四分位数间距或第一和第三四分位数之间的距离。下端须茎从箱线图的箱体向下延伸到距离上四分位距(IQR) 1.5*IQR的最小值处。超过须茎末端的数据点被视作异常值并用点标识(如Tukey所指定)。

在凹槽箱线图中,凹槽向外延伸1.58*IQR/sqrt(n)。这给出了一个大约95%的置信区间。有关更多详细信息,请参见McGill等人(1978)。


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调用中有一些警告,但您应该可以安全地忽略它们。


那个完美地运作了,谢谢。 同时,我认为我可能已经找到了另一种解决问题的方法,虽然还没有测试过:(https://dev59.com/RW445IYBdhLWcg3wpLx_) - Ant
请参阅?geom_boxplot中的“#使用预计算统计信息”部分。 - Henrik
@Ant 是的,那也可能行得通。基本上就是同样的事情:手动计算摘要统计信息。 - joran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接