Ответ 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)
Обновление: маркировка оси 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)