Одна небольшая проблема заключается в том, что вы печатаете значение N
один раз для каждой точки данных, а не один раз для каждой комбинации цил / ам / редуктор. Поэтому вы можете захотеть добавить шаг фильтрации, чтобы избежать переполнения этого текста, что может выглядеть грязно на экране, снизить контроль над альфа-каналом и замедлить построение графиков в случаях с большими данными.
library(tidyverse)
exmp = mtcars %>% as_tibble() %>%
mutate(cartype = as.factor(row.names(mtcars))) %>%
group_by(cyl, am, gear) %>%
mutate(N = n()) %>%
ungroup() %>%
mutate(am = as.factor(am),
gear = as.factor(gear))
(Данные Приготовление выше было необходимо, чтобы график выглядел как ваш пример. Я использую tidyverse 1.2.1 и ggplot2 3.2.1)
ggplot(exmp, aes(x = am, fill = gear, y = wt,
group = interaction(gear, am))) +
facet_grid(.~cyl) +
geom_boxplot() +
geom_text(data = exmp %>% distinct(cyl, gear, am, N),
aes(y = 6, label = N),
position = position_dodge(width = 0.8))
Вот тот же график с оверплоттингом: