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

时间:2014-01-23 14:13:00

标签: r plot 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()

enter image description here

图片和代码来源:http://www.cookbook-r.com/Graphs/Plotting_distributions_(ggplot2)/

2 个答案:

答案 0 :(得分:6)

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

enter image description here

不使用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)。

答案 1 :(得分:5)

您可以通过将大小设置为0来隐藏异常值:

ggplot(df, aes(x=cond, y=rating, fill=cond)) + 
  geom_boxplot(outlier.size = 0) + 
  guides(fill=FALSE) + coord_flip()

您可以使用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()