【问题标题】:Equivalent of 'range' in boxplot for ggplot2等效于 ggplot2 的箱线图中的“范围”
【发布时间】:2013-09-06 20:31:09
【问题描述】:

我试图让 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) 

【问题讨论】:

    标签: r ggplot2 boxplot outliers


    【解决方案1】:

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

    处理异常值的更简单方法是(至少在 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) 了解更多详情。

    【讨论】:

      【解决方案2】:

      我知道的唯一方法是像这样自己计算框值:

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

      【讨论】:

      • 效果很好,谢谢。与此同时,我想我可能已经找到了解决问题的另一种方法,但还没有测试过:(stackoverflow.com/questions/4765482/…)
      • 另见?geom_boxplot中的“# Using precomputed statistics”部分
      • @Ant 是的,这可能也可以。它基本上等同于同一件事:手动计算摘要统计信息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-14
      • 1970-01-01
      • 2022-08-09
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多