从marrangeGrob(或arrangeList)pdf中删除页码

4

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中也有几个$labelarrangeGrob的输出类是arrangeList)。
一旦您找到了$label所在的位置,那么这个方法就可以解决问题: allarranged[[1]]$children$GRID.frame.1770$children$GRID.cellGrob.1772$children$GRID.text.1690$label <- NULL
但是如何预测整个树,或者递归地查找$label呢?如果这不是一个有趣的问题,我可能会直接联系gridExtra的维护者。

谢谢@baptiste,软件包维护者!我怎么可能自己解决这个问题呢? - nacnudus
文档页面的使用部分在这里是一个很好的提示。 - baptiste
抱歉@baptiste,不知怎么错过了。我想我一定是扫视了参数列表并跟随链接到arrangeGrob,但它们实际上没有被定义。 - nacnudus
它有点粗糙,但还可以 :) - baptiste
1个回答

7
您需要将marrangeGrob中的top=NULL参数传递。
all <- dlply(mtcars, .(gear), p)

allarranged <- do.call(marrangeGrob, c(all, nrow=1, ncol=2, list(top=NULL) ))
ggsave("multipage.pdf", allarranged, width=12)

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