我知道geom_boxplot()
的默认设置是:
但我想从平均值做4个标准差:
这可以在ggplot2中做到吗?如果没有,有什么替代方案?
我看到一篇帖子询问有关更改为不同IQR的信息,但我特别感兴趣转换为标准偏差。
答案 0 :(得分:1)
这可以使用stat = "identity"
完成,如某些评论中所述,但诀窍是将异常值放入数据中。需要在列表列中提供异常值。这是你如何做到的。
首先,编制一些数据并绘制一个常规的箱形图:
set.seed(123)
d <- data.frame(y = c(rnorm(100), rnorm(100)+.5, rnorm(100)-1),
x = rep(c("A", "B", "C"), each = 100))
ggplot(d, aes(x, y)) + geom_boxplot()
现在,手动计算统计数据并绘制具有替代异常值定义的boxplot。请注意,我使用平均值+/- 2 * SD,因此我得到了更多的异常值。显而易见的是如何将代码更改为+/- 4 * SD。
library(dplyr)
d %>% group_by(x) %>%
summarize(middle = median(y),
mean = mean(y),
sd = sd(y),
lower = quantile(y, probs = .25),
upper = quantile(y, probs = .75),
ymin = max(mean - 2*sd, min(y)),
ymax = min(mean + 2*sd, max(y)),
outliers = list(y[y<ymin | y > ymax])) %>%
ggplot(aes(x, ymin = ymin, lower = lower,
middle = middle, upper = upper, ymax = ymax,
outliers = outliers)) +
geom_boxplot(stat = "identity")
免责声明:我仅使用当前开发版本的ggplot2对此进行了测试,不确定它是否适用于当前在CRAN上的版本。