在箱形图中去除离群值。

13
< p>在Rggplot2中,有没有一种简单的方法可以从箱线图中删除晶须?我只想保留箱子本身。

MWE:

library("ggplot2")
p <- ggplot(mtcars, aes(factor(cyl), mpg))
p + geom_boxplot(outlier.size = 0)
2个回答

22

我们只需要添加参数coef=0

library(ggplot2)
p <- ggplot(mtcars, aes(factor(cyl), mpg))
p + geom_boxplot(outlier.shape = NA, coef = 0) # Or outlier.size = -1 instead of outlier.shape = NA

在此输入图片描述


太好了!不过你是怎么知道这个的呢?我找不到任何关于 coef 的文档。虽然我理解它在做什么,但它似乎非常强大,我怀疑其他图表上可能有一个可以调整的 **coef**,这可能会非常有帮助。谢谢! - Mike Williamson
1
@MikeWilliamson 谢谢。说实话我不记得了。在geom_boxplot文档中,它说这个参数确定“须的长度是IQR的倍数。默认为1.5”,所以可能我试过0。对于使用R基础的箱线图来说,更难找到需要的参数(?bxp)whisklty 和 staplelty:boxplot(mpg ~ cyl, data = mtcars, whisklty = 0, staplelty = 0) - mpalanco
1
只有我这样吗?我不得不将 outlier.size = 0 更改为 outlier.shape = NA 才能使离群值消失。 - JelenaČuklina
@JelenaČuklina 这个曾经是有效的,但现在不再有效了。你可以使用 outlier.size = -1,但隐藏异常值的最佳选项是你提出的:outlier.shape = NA。我会编辑我的答案。谢谢。 - mpalanco

10

一种方法是使用stat_summary_df()计算中位数、25和75百分位数,然后使用geom="crossbar"绘制这些数据。在stat_summary_df()内部,可以使用"median_hilow"自动完成。为此,您需要添加Hmisc库并在绘图之前定义stat_summary_df()函数。 "median_hilow"的默认值为2.5和97.5百分位数,因此您需要添加参数conf.int=0.5

 stat_sum_df <- function(fun, geom="crossbar", ...) {
    stat_summary(fun.data=fun, colour="red", geom=geom, width=0.2, ...)
 }

library(Hmisc)
ggplot(mtcars, aes(factor(cyl), mpg)) + 
   stat_sum_df("median_hilow",conf.int=0.5,fill="white")

在这里输入图像描述


很棒的答案。conf.int(现在?ggplot2 3.3.5)需要通过fun.args传递。因此,stat_sum_df("median_hilow", fun.args = list(conf.int=0.5), fill="white") - JWilliman

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