Как использовать пустое пространство, созданное facet_wrap?

У меня есть граненый сюжет, который образует сетку n x m. По дизайну последняя (нижняя правая) ячейка всегда пуста, поэтому я хотел бы использовать дополнительное пространство, добавив еще один объект ggplot. Мое текущее решение основано на низкоуровневом подходе viewport, который не очень элегантен и требует жесткого кодирования положения и размера.

Вместо этого я предполагаю, что пустое пространство доступно другим способом, возможно, с помощью gridExtra?

Вот минимальный пример для n=m=2. Обратите внимание, что края не выровнены должным образом, поэтому требуется дополнительная работа, чтобы вручную настроить параметры области просмотра, что является проблемой, особенно если (n, m) измениться впоследствии.

library(ggplot2)
library(grid)
p <- qplot(displ, hwy, data = mpg[mpg$cyl != 5, ]) + 
       facet_wrap(~ cyl, nrow=2)
q <- qplot(date, unemploy, data = economics, geom = "line") + 
       labs(x = NULL, y = NULL)
p
print(q, vp=viewport(0.75, 0.275, 0.45, 0.45))

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


person tonytonov    schedule 17.03.2014    source источник


Ответы (1)


Вы можете использовать gtable для доступа к «пустой ячейке», например

library(gtable)
pg <- ggplotGrob(p)
qg <- ggplotGrob(q)

pl <- gtable_filter(pg, 'panel', trim=F)$layout
pg <- gtable_add_grob(pg, qg, t=max(pl$t), l=max(pl$l))

grid.newpage()
grid.draw(pg)

Редактировать: общее размещение для n x m фасетов

person Rosen Matev    schedule 17.03.2014
comment
Спасибо. Именно то, что я ищу. - person tonytonov; 18.03.2014