gridExtra
中的 marrangeGrob
可以将 grobs(一般是 ggplots)按行、列和页排列。它还会为页面编号。
require(ggplot2)
require(plyr)
require(gridExtra)
p <- function(plotdata) {
x <- ggplot(plotdata, aes(wt, mpg)) +
geom_point() +
ggtitle(plotdata$gear[1])
return(x)
}
all <- dlply(mtcars, .(gear), p)
allarranged <- do.call(marrangeGrob, c(all, nrow=1, ncol=2))
ggsave("multipage.pdf", allarranged, width=12)
这是一个有些愚蠢但可以重现的例子。
现在检查str(allarranged[[1]])
的输出,以揭示页面编号的对象。 简化为基本要素,它们在这里:
[[1]]
$ children :List of 5
..$GRID.frame.1925:List of 6
.. ..$ children :List of 5
.. .. ..$ GRID.cellGrob.1927:List of 10
.. .. .. ..$ children :List of 1
.. .. .. .. ..$ GRID.text.1845:List of 11
.. .. .. .. .. ..$ label : chr "page 1 of 2"
我在那里编写了前几行,因为我无法将
str()
的输出写入文件。尽管如此,问题依然存在。很多祖先的$label
也是问题儿童。每个arrangelist
中也有几个$label
(arrangeGrob
的输出类是arrangeList
)。一旦您找到了
$label
所在的位置,那么这个方法就可以解决问题:
allarranged[[1]]$children$GRID.frame.1770$children$GRID.cellGrob.1772$children$GRID.text.1690$label <- NULL但是如何预测整个树,或者递归地查找
$label
呢?如果这不是一个有趣的问题,我可能会直接联系gridExtra的维护者。