我正在尝试将样本大小添加到按两个级别分组的箱形图(最好是在它们的顶部或底部)。我使用了facet_grid()函数来生成面板图。然后我尝试使用annotate()函数来添加样本大小,但是这不起作用,因为它重复了第二个面板中的值。有一种简单的方法可以做到这一点吗?
.c-grid__content {
...
flex-basis: 0;
}
答案 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)
另一种方法是使用内置的汇总函数,但这可能很繁琐。这是一个例子:
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)
在这里,我使用fun.y
将摘要放在y值的中间位置,并使用fun.ymax
计算一个名为 .. ymax .. 的内部变量函数length
(只计算观察次数)。