как избавиться от случайной фоновой сетки из arrangeGrob


Мне нужно обернуть несколько участков в сетку, часто с неравномерным числом, поэтому часто будет "пустое место". Мне нужно использовать arrangeGrob() - Не grid.arrange() - потому что я хочу сохранить сюжет на потом, а не plot() сразу.

Это прекрасно работает, но, как ни странно, 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()
p3 <- ggplot(mtcars, aes(x =factor(cyl), y=disp)) + geom_boxplot()
library(gridExtra)
y <- arrangeGrob(p1, p2, p3, ncol = 2)
plot(y)

Дает сюжет с каким-то странным серым веществом в правом нижнем углу:

серая странность

Сравните это с grid.arrange():

grid.arrange(p1, p2, p3, ncol = 2)

Дает красивый сюжет без серых странностей:

Введите описание изображения здесь

Откуда берется это серое вещество в правом нижнем углу? И как мне от него избавиться?

Обратите внимание, что я не могу избежать пустых мест, изменяя ncol; у меня иногда есть неравномерное количество участков, поэтому всегда будут пустые места. Я в порядке с пустыми местами, мне просто нравится, чтобы они были чистыми. (В изоляции это последнее предложение звучит довольно красиво ОКР-иш .

Обновить

Автор пакета (?) ответ ниже: я должен был использовать grid.draw(y).

Аналогичная проблема остается (может быть, та же самая первопричина?): если вы строите некоторый объект раньше, "пустое место" остается занятым этимпрошлым сюжетом. Странный. Вот так:

plot(p1)
grid.draw(y)

Выходы:

прошлые сюжетные странности

2 3

2 ответа:

arrangeGrob() теперь возвращает gtable, который вы должны нарисовать с помощью grid.draw(), а не plot().

grid.draw(y)

Выходы

прекрасный сюжет

Чтобы избавиться от артефактов из прошлых сюжетов (согласно приведенному выше обновлению), используйте grid.newpage().

Удалите аргумент nrow. Вот так:

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, ncol = 2)
plot(y)