在指定分位数后添加箱线图离群值
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)
我需要在 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)