сохранить аранжировку в объекте, не создавая объект для печати

Я хочу сохранить, но не печатать (пока) группу ggplot() в сетке (через arrangeGrob(), правильно?), а затем распечатать и получить их позже.

Это перезагрузка существующего вопроса. Как ни странно, этот ответ не работает, и у меня нет идея почему. Я использую точно такой же код.

  library(ggplot2)
  p1 <- ggplot(mtcars, aes(x=factor(cyl), y=mpg)) + geom_boxplot()
  p2 <- ggplot(mtcars, aes(x=factor(cyl), y=wt)) + geom_boxplot()
  library(gridExtra)
  y <- arrangeGrob(p1, p2)
  class(y)
  y

Как ни странно, это не (как в приведенном выше ответе) дает сетку графиков, а:

> class(y)
[1] "gtable" "grob"   "gDesc" 
> y
TableGrob (2 x 1) "arrange": 2 grobs
  z     cells    name           grob
1 1 (1-1,1-1) arrange gtable[layout]
2 2 (2-2,1-1) arrange gtable[layout]

Что здесь происходит?


person maxheld    schedule 16.07.2015    source источник


Ответы (1)


Пакет gridExtra был недавно обновлен, что изменило внутреннюю работу arrangeGrob и тип объекта, который он возвращает (теперь это gtable).

Вам нужно позвонить grid.draw:

grid.draw(y)

результирующий сюжет

Изменить: не используйте plot(), как было предложено изначально; он добавит серый фон и предназначен только для отладки gtables.

person Roland    schedule 16.07.2015
comment
ответ на этот другой вопрос рекомендует использовать grid.draw(), не plot(). Я смущен. -› stackoverflow.com/questions/31463445/ Автор другого ответа, по-видимому, является автором пакета... - person maxheld; 17.07.2015
comment
@maxheld на самом деле этот ответ не объясняет, как сохранить сюжет с ggsave позже в вашем сюжете, не так ли? Моя проблема в сохранении, не знаю как изменить свой код без скачивания разрабатываемой версии с ggplot2 - person drmariod; 19.11.2015
comment
Возможно, стоит упомянуть, что вывод grid.draw(x) в большинстве случаев оказывается NULL. Чтобы обойти это и работать с ggsave, я использовал ggpubr::as_ggplot(x). Это преобразует gtable/grobArrange() в класс ggplot, с которым затем можно работать как обычно. Дополнительное техническое примечание, я считаю, что as_ggplot() основан на коде из cowplot. - person al-obrien; 08.11.2018
comment
Является ли упомянутый здесь grid.draw grid::grid.draw? Кажется, grid.draw в gridExtra нет. Я выбрал gridExtra::grid.arrange для аналогичного объекта. - person Kim; 18.11.2018