Объединение двух гробов, один из которых создан с помощью grid.draw - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь объединить два графических объекта (grob) в один график - один из них создан с помощью вызова "standard ggplot()", другой - с помощью grid.draw() на объекте ggplot_gtable ()основан на этой теме ).

library(ggplot2)
library(grid)
library(gridExtra)

plot_gtable <- function(x) {
  grid::grid.draw(ggplot_gtable(ggplot_build(x)))
}

plot1 <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
plot2 <- plot_gtable(ggplot(mtcars, aes(mpg)) + geom_dotplot())

grid.arrange(plot1, plot2)

Ошибка в gList (структура (список (wrapvp = структура (список (x = структура (0.5, класс = "единица"), valid.unit= 0L, unit = "npc"),: в "gList" разрешены только 'grobs'

Создано в 2018-12-12 пакетом Представить (v0.2.1)

Очевидно, что вызов grid.draw приводит к NULL объекту, а не grob, что, по-видимому, и является причиной сбоя grid.arrange() в этом случае.

Сначала я попробовал с grid::grid.newpage и без него.

Я пытался использовать grid::viewport и gridExtra::arrangeGrob и ggpubr::ggarrange и cowplot::plot_grid, а также пакет patchwork, но все безрезультатно.

Как создать комбинированный график с этими объектами?

1 Ответ

0 голосов
/ 12 декабря 2018

При объединении графиков и / или гробов с использованием grid.arrange вы хотите использовать реальный объект, а не пытаться его построить.Вот почему plot2 равно NULL, поскольку оно нарисовано, а не возвращено, и поэтому не может быть объединено.Поэтому не рисуйте его, прежде чем объединять графики.

library(ggplot2)
library(gridExtra)

# example ggplot
plot1 <- ggplot(mtcars, aes(mpg, wt)) + geom_point()
# example gtable
plot2 <- ggplotGrob(plot1)

grid.arrange(plot1, plot2)
...