ggplot2 box-whisker plot:显示95%置信区间并删除异常值

Dr.*_*rox 4 plot r ggplot2

我想要一个看起来就像下面那个的盒子图.但是,我想提出(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)/

bri*_*rns 9

我使用以下内容显示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).

  • 我认为这显示了 95% 的区间,但不是 95% *置信度*区间。我已经用“Rmisc::CI”函数和统计测试验证了这种方法,它确实没有可视化预期的“置信度”区间。 (2认同)

Jaa*_*aap 6

您可以通过将大小设置为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)

  • 这没有提到置信区间 (3认同)