Во-первых, несколько фиктивных графиков:
df <- data.frame(x = 1:10, y = 2:11)
Поскольку мои реальные графики довольно сложны, я не собираюсь приводить их здесь, но буду использовать другие графики, которые воспроизводят проблему. Достаточно сказать, что когда align
установлен на "hv"
в plot_grid
, это создает много пустого пространства между моими графиками. Чтобы это исправить, я установил поля в исходных графиках так:
library(ggplot2)
plot1 <- ggplot(df, aes(x = x, y = y)) +
geom_point() +
theme(plot.margin = unit(c(-1, 0, 0, 0), "cm"))
plot2 <- ggplot(df, aes(x = y, y = -x)) +
geom_point() +
theme(plot.margin = unit(c(-1, 0, 0, 0), "cm"))
plot3 <- ggplot(df, aes(x = x, y = y)) +
geom_point() +
theme(plot.margin = unit(c(-1, 0, 0, 0), "cm"))
plot4 <- ggplot(df, aes(x = y, y = -x)) +
geom_point() +
theme(plot.margin = unit(c(-1, 0, 0, 0), "cm"))
Что расширило вершины графиков, чтобы они заполнили пустое пространство. Все отлично и модно (в этом примере может быть небольшое перекрытие между верхом и низом):
library(cowplot)
plot5 <- plot_grid(plot1, plot2, plot3, plot4, nrow = 2, ncol = 2,
align = "hv")
plot5
Пока я не попытался добавить ярлыки. Поскольку я расширил графики, я хотел добавить метки выше предела y = 1
.
plot5 <- plot_grid(plot1, plot2, plot3, plot4, nrow = 2, ncol = 2,
align = "hv", labels = c("A", "B", "C", "D"),
label_x = 0.1,
label_y = 1.15)+
theme(plot.margin = unit(c(3, 1, 1, 1), "cm"))
plot5
Возвращает это предупреждение:
Removed 1 rows containing missing values (geom_text).
Это означает, что он снял две верхние метки, хотя, похоже, места достаточно. Итак, я подумал, что, возможно, поля графика не применяются до тех пор, пока не будут нанесены метки, или, возможно, обрезка вызывает проблему. Итак, я сделал это:
plot5 <- plot_grid(plot1, plot2, plot3, plot4, nrow = 2, ncol = 2,
align = "hv") +
theme(plot.margin = unit(c(3, 0, 0, 0), "cm")) +
coord_cartesian(clip = "off")
plot5 +
draw_plot_label(c("A", "B", "C", "D"), c(0, 0.5, 0, 0.5), c(1.1, 1.1, .5, .5))
Это возвращает ту же ошибку, что и раньше, хотя, как вы можете видеть, в верхней части графика доступно больше места. В качестве последнего средства я также отключил вырезку на исходных графиках, но это тоже ничего не исправило, например:
plot1 <- ggplot(df, aes(x = x, y = y)) +
geom_point() +
theme(plot.margin = unit(c(-1, 0, 0, 0), "cm")) +
coord_cartesian(clip = "off")
Проблема возникает только тогда, когда я прокладываю график y = 1
. y = 1.01
вызывает проблемы, например.
Как мне решить эту проблему? Это кажется довольно простой проблемой, если только нет проблем с ggplot
или cowplot
.