我想要一个看起来就像下面那个的盒子图.但是,我想提出(1)95%的置信区间和(2)没有异常值,而不是默认值.
95%的置信区间可能意味着(i)扩展盒子并去除胡须,或(ii)只有一个平均值和胡须,并移除盒子.或者,如果人们有其他想法在这样的情节中呈现95%的置信区间,我愿意接受建议.最终目标是在同一图上显示多个类别的数据的均值和间隔.
set.seed(1234)
df <- data.frame(cond = factor( rep(c("A","B"), each=200) ),
rating = c(rnorm(200),rnorm(200, mean=.8))
ggplot(df, aes(x=cond, y=rating, fill=cond)) + geom_boxplot() +
guides(fill=FALSE) + coord_flip()
Run Code Online (Sandbox Code Playgroud)

图片和代码来源:http://www.cookbook-r.com/Graphs/Plotting_distributions_ (ggplot2)/
我使用以下内容显示95%的间隔.基于我所读到的,它并非常见的使用盒子和胡须,但它不是默认值,因此您需要清楚地说明您在图表中显示的内容.
quantiles_95 <- function(x) {
r <- quantile(x, probs=c(0.05, 0.25, 0.5, 0.75, 0.95))
names(r) <- c("ymin", "lower", "middle", "upper", "ymax")
r
}
ggplot(df, aes(x=cond, y=rating, fill=cond)) +
guides(fill=F) +
coord_flip() +
stat_summary(fun.data = quantiles_95, geom="boxplot")
Run Code Online (Sandbox Code Playgroud)
而不是使用geom_boxplot,使用stat_summary指定您要使用的限制的自定义函数:
"ymin" 是下晶须的下限"lower" 是下方框的下限"middle" 是框的中间(通常是中位数)"upper" 是上方框的上限"ymax" 是上晶须的上限.在提供的函数(quantiles_95)中,内置quantile函数与自定义probs参数一起使用.如上所述,胡须将覆盖90%的数据:从最低5%到高95%.与往常一样,这些箱子将在中间的两个四分位数范围内,从25%到75%.
您可以随时更改自定义功能以选择不同的分位数(甚至不使用分位数),但您需要非常小心.正如评论中指出的那样,当人们看到一个盒子和胡须情节时,会有一定的期望.如果您使用相同的形状图来传达不同的信息,那么您可能会让人感到困惑.
如果你想摆脱胡须,那就"ymin"等于"lower"和"ymax"等于"upper".如果你想要所有的胡须和没有盒子,设置"upper"和"lower"两者都等于"middle"(或只是使用geom_errorbars).
您可以通过将大小设置为0来隐藏异常值:
ggplot(df, aes(x=cond, y=rating, fill=cond)) +
geom_boxplot(outlier.size = 0) +
guides(fill=FALSE) + coord_flip()
Run Code Online (Sandbox Code Playgroud)
您可以使用以下stat_summary函数将平均值添加到绘图中:
ggplot(df, aes(x=cond, y=rating, fill=cond)) +
geom_boxplot(outlier.size = 0) +
stat_summary(fun.y="mean", geom="point", shape=23, size=4, fill="white") +
guides(fill=FALSE) +
coord_flip()
Run Code Online (Sandbox Code Playgroud)