在指定分位数后添加箱线图离群值

adding boxplot outliers after specifying quantiles

我需要在 R 中创建一个自定义箱线图,它使用构成箱线的分位数 0.05、0.20、0.50、0.80 和 0.95,而不是默认值。

默认绘图是使用此代码生成的:

ggplot(data, aes(Site, LOG10Val)) +
  geom_boxplot()

看起来像这样:

要指定箱线图的自定义边界,我使用的代码是:

ggplot(data, aes(Site, LOG10Val)) + 
  stat_summary(geom = "boxplot", 
               fun.data = function(x) setNames(quantile(x, c(0.05, 0.2, 0.5, 0.8, 0.95)), 
                                               c("ymin", "lower", "middle", "upper", "ymax")), 
               position = "dodge")

情节变为:

有没有办法将异常值(即 >95%)重新引入自定义箱线图中?

谢谢。

编辑:我的数据结构如下:

# A tibble: 6 x 5
  Date       Site  Analyte      Value LOG10Val
  <date>     <fct> <fct>        <dbl>    <dbl>
1 2014-01-10 E     Ammonia_mg.L 0.02     -1.70
2 2014-01-10 C     Ammonia_mg.L 0.01     -2   
3 2014-01-10 D     Ammonia_mg.L 0.015    -1.82
4 2014-01-31 E     Ammonia_mg.L 0.01     -2   
5 2014-01-31 C     Ammonia_mg.L 0.01     -2   
6 2014-01-31 D     Ammonia_mg.L 0.01     -2  

实现所需结果的一种选择是通过第二个 stat_summary 层添加异常值。

使用 iris 作为示例数据:

library(ggplot2)

ggplot(iris, aes(x = Species, y = Sepal.Length)) +
  stat_summary(
    geom = "boxplot",
    fun.data = function(x) {
      setNames(
        quantile(x, c(0.05, 0.2, 0.5, 0.8, 0.95)),
        c("ymin", "lower", "middle", "upper", "ymax")
      )
    }
  ) +
  stat_summary(geom = "point", fun = function(x) {
    outlier_high <- x > quantile(x, .95)
    outlier_low <- x < quantile(x, .05)
    ifelse(outlier_high | outlier_low, x, NA)
  }, na.rm = TRUE)