Ggplot2 несколько подгрупп гистограммы

Я пытаюсь создать гистограмму с несколькими группировками факторов. Пример из-за того, что я пытаюсь создать, сгруппированный по разнообразию и ирригации:

enter image description here

Я знаю, что я мог бы создавать несколько графиков с помощью facet_wrap(), но я хотел бы создать несколько графиков для этого же типа данных за несколько лет подобных данных. Пример данных, которые я использовал в этом примере:

Year        Trt Variety    geno yield   SE
2010-2011   Irr Variety.2   1   6807    647
2010-2011   Irr Variety.2   2   5901    761
2010-2011   Irr Variety.1   1   6330    731
2010-2011   Irr Variety.1   2   5090    421
2010-2011   Dry Variety.2   1   3953    643
2010-2011   Dry Variety.2   2   3438    683
2010-2011   Dry Variety.1   1   3815    605
2010-2011   Dry Variety.1   2   3326    584

Есть ли способ создать несколько группировок в ggplot2? Я искал довольно долгое время и еще не видел пример чего-то вроде приведенного выше примера.

Спасибо за любую помощь, которую вы можете иметь.

Ответ 1

Это может быть начало.

dodge <- position_dodge(width = 0.9)

ggplot(df, aes(x = interaction(Variety, Trt), y = yield, fill = factor(geno))) +
  geom_bar(stat = "identity", position = position_dodge()) +
  geom_errorbar(aes(ymax = yield + SE, ymin = yield - SE), position = dodge, width = 0.2)

enter image description here

Обновление: маркировка оси x
Я добавил:
coord_cartesian, чтобы установить пределы оси y, в основном нижний предел, чтобы избежать расширения оси по умолчанию.
annotate, чтобы добавить нужные метки. У меня жестко закодированы позиции x, которые я нахожу в этом довольно простом примере.
theme_classic, чтобы удалить серый фон и сетку. theme, увеличьте более низкую границу участка, чтобы иметь место для двухрядной метки, удалите метки по умолчанию.
Последний набор кода: поскольку текст добавляется под осью x, он "исчезает" вне области графика, и нам нужно удалить "обрезку". Что это!

library(grid)

g1 <- ggplot(data = df, aes(x = interaction(Variety, Trt), y = yield, fill = factor(geno))) +
  geom_bar(stat = "identity", position = position_dodge()) +
  geom_errorbar(aes(ymax = yield + SE, ymin = yield - SE), position = dodge, width = 0.2) +
  coord_cartesian(ylim = c(0, 7500)) +
  annotate("text", x = 1:4, y = - 400,
           label = rep(c("Variety 1", "Variety 2"), 2)) +
  annotate("text", c(1.5, 3.5), y = - 800, label = c("Irrigated", "Dry")) +
  theme_classic() +
  theme(plot.margin = unit(c(1, 1, 4, 1), "lines"),
       axis.title.x = element_blank(),
       axis.text.x = element_blank())

# remove clipping of x axis labels
g2 <- ggplot_gtable(ggplot_build(g1))
g2$layout$clip[g2$layout$name == "panel"] <- "off"
grid.draw(g2)

enter image description here