如何使用facet_wrap生成的空白空间?

时间:2014-03-17 09:33:33

标签: r ggplot2 facet gridextra grob

我有一个构成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))

enter image description here

1 个答案:

答案 0 :(得分:10)

您可以使用gtable访问&#34;空单元格&#34;像这样

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方面的通用展示位置