如何利用facet_wrap产生的空白空间?

10

我有一个分面图,它形成了一个 n x m 的网格。按照设计,最后一个(右下角)单元格始终为空,因此我想利用额外的空间添加另一个 ggplot 对象。我当前的解决方案依赖于低级别的 viewport 方法,这不是非常优雅的,并且需要一些硬编码来确定位置和大小。

相反,我认为可以通过其他方式访问空白空间,可能是使用 gridExtra

这里是 n=m=2 的最小示例。请注意,边缘没有对齐,因此需要进行一些额外的工作来手动调整 viewport 的参数,这很麻烦,特别是如果 (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个回答

10
您可以使用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 个面片


谢谢。正是我所寻找的。 - tonytonov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接