将观察数量添加到多个 ggplot2 箱线图中

LHA*_*LHA 3 r ggplot2 boxplot

我正在尝试创建带有描述性信息(平均值、计数等)的箱线图。我找到了很多关于如何为具有不同组的一个箱线图添加数字的示例,但我没有找到一种为多个箱线图网格(facet_wrap)添加这些数字的方法。

例如,本文介绍了如何为一个箱线图添加数字 - 我正在尝试对多个箱线图执行相同的操作

library(reshape2)
library(ggplot2)
df.m <- melt(iris, id.var = "Species")
p <- ggplot(data = df.m, aes(x=variable, y=value)) + 
  geom_boxplot(aes(fill=Species))
p + facet_wrap( ~ variable, scales="free")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在此图的顶部 - 我想在每个框的顶部添加相关的描述信息。

Cru*_*ing 7

创建计算计数和平均值的函数

stat_box_data <- function(y) {
  return( 
    data.frame(
      y = 0.5+1.1*max(y),  #may need to modify this depending on your data
      label = paste('count =', length(y), '\n',
                    'mean =', round(mean(y), 1), '\n')
    )
  )
}

  )
}
df.m <- melt(iris, id.var = "Species")
Run Code Online (Sandbox Code Playgroud)

如果您有较大的异常值而不是上面的内容,您可能需要使用此或类似的内容y=0.5...

y=quantile(y,probs=0.95)*1.1,

绘制数据并stat_summary与您的自定义函数一起使用

ggplot(data = df.m, aes(x=Species, y=value)) + 
  geom_boxplot(aes(fill=Species))+
  stat_summary(
    fun.data = stat_box_data, 
    geom = "text", 
    hjust = 0.5,
    vjust = 0.9
  ) + 
facet_wrap( ~ variable, scales="free")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述