Я пытаюсь объединить два объекта ggplot с помощью cowplot::plot_grid()
и выровнять их по вертикали. Обычно это довольно просто использовать align = "v"
.
dat1 <- data.frame(x = rep(1:10, 2), y = 1:20)
dat2 <- data.frame(x = 1:10, y = 1:10)
plot1 <- ggplot(dat1, aes(x = x, y = y)) + geom_point()
plot2 <- ggplot(dat2, aes(x = x, y = y)) + geom_point()
cowplot::plot_grid(plot1, plot2, ncol = 1, align = "v")
Однако этот подход не работает, когда ggplots используют coord_equal()
, потому что plot_grid()
не может изменять оси, когда соотношение сторон принудительно. Вместо этого по умолчанию высота каждого участка остается одинаковой.
plot1 <- ggplot(dat1, aes(x = x, y = y)) + geom_point() + coord_equal()
plot2 <- ggplot(dat2, aes(x = x, y = y)) + geom_point() + coord_equal()
cowplot::plot_grid(plot1, plot2, ncol = 1, align = "v")
Я могу форсировать свою цель, играя и правильно понимая аргумент rel_heights
, но это не жизнеспособное решение, так как мне нужно построить много динамических сюжетов. Здесь оси Y выровнены, и координаты всех осей по-прежнему равны.
cowplot::plot_grid(plot1, plot2, ncol = 1, align = "v", rel_heights = c(2, 1.07))
Я видел много подходов к аналогичным вопросам, в которых используются ggplot2::ggplotGrob()
и grid::grid_draw()
, но при использовании coord_equal()
ничего не решает эти проблемы. Возможно, лучшее решение вообще не использует cowplot::plot_grid()
, или, возможно, решение каким-то образом динамически определяет и передает правильные значения rel_heights
. Думаю, я бы предпочел более поздний вариант, чтобы иметь возможность легко использовать другие функции, поставляемые с cowplot::plot_grid()
. Возможно, некоторые полезные идеи можно найти в этом родственном подходе.
egg::ggarrange(plot1, plot2)
это то, что вам нужно? - person user20650   schedule 22.02.2018egg::ggarrange(plot1, plot2, ncol = 1)
, и он действительно выполняет вертикальное выравнивание, но координаты оси y не поддерживаются равными координатам оси x. Ось Y немного растягивается на верхнем графике. Кроме того, я больше не могу найтиegg
на github - меня беспокоит, что он больше не поддерживается. - person Kevin   schedule 22.02.2018egg
не разрабатывает на github, но в настоящее время библиотека поддерживается в хорошем состоянии. - person Claus Wilke   schedule 23.02.2018