在指定分位数后添加箱线图异常值

Posted

技术标签:

【中文标题】在指定分位数后添加箱线图异常值【英文标题】:adding boxplot outliers after specifying quantiles 【发布时间】:2021-12-05 22:45:04 【问题描述】:

我需要在 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  

【问题讨论】:

你能给我们一个使用dput的数据示例 我在@neuron 上面的问题中包含了我的数据结构 【参考方案1】:

实现所需结果的一种方法是通过第二个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)

【讨论】:

以上是关于在指定分位数后添加箱线图异常值的主要内容,如果未能解决你的问题,请参考以下文章

通过箱线图判断偏向

如何看箱线图??

07-matplotlib-箱线图

箱型图

箱型图

Python数据可视化 箱线图