Как использовать пустое пространство, созданное 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))
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
фасеты