在指定分位数后添加箱线图异常值
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)
【讨论】:
以上是关于在指定分位数后添加箱线图异常值的主要内容,如果未能解决你的问题,请参考以下文章