将样本大小添加到箱图的面板图中

时间:2017-09-18 22:36:19

标签: ggplot2 rstudio boxplot

我正在尝试将样本大小添加到按两个级别分组的箱形图(最好是在它们的顶部或底部)。我使用了facet_grid()函数来生成面板图。然后我尝试使用annotate()函数来添加样本大小,但是这不起作用,因为它重复了第二个面板中的值。有一种简单的方法可以做到这一点吗?

.c-grid__content {
  ...
  flex-basis: 0;
}

enter image description here

1 个答案:

答案 0 :(得分:2)

有多种方法可以完成这类任务。最灵活的方法是将绘图调用之外的统计数据计算为单独的数据框,并将其用作自己的图层:

library(dplyr)
library(ggplot2)

cw_summary <- ChickWeight %>% 
  group_by(Diet) %>% 
  tally()

cw_summary
# A tibble: 4 x 2
    Diet     n
  <fctr> <int>
1      1   220
2      2   120
3      3   120
4      4   118
ggplot(ChickWeight, aes(Diet, weight)) + 
  geom_boxplot() +
  facet_grid(~Diet) +
  geom_text(data = cw_summary,
            aes(Diet, Inf, label = n), vjust = 1)

enter image description here

另一种方法是使用内置的汇总函数,但这可能很繁琐。这是一个例子:

ggplot(ChickWeight, aes(Diet, weight)) + 
  geom_boxplot() +
  stat_summary(fun.y = median, fun.ymax = length,
               geom = "text", aes(label = ..ymax..), vjust = -1) +
  facet_grid(~Diet)

enter image description here

在这里,我使用fun.y将摘要放在y值的中间位置,并使用fun.ymax计算一个名为 .. ymax .. 的内部变量函数length(只计算观察次数)。