使用指定的分页符在多个页面上的列表中排列多个ggplots

时间:2017-08-18 00:26:55

标签: r ggplot2 gridextra

我试图从列表中获取图并输出多页pdf。我可以使用gridExtra轻松地做到这一点:marrangeGrob但是我遇到了在正确的位置获取分页符的问题。我的数据是7组,所以我想要4页,每页有两个图,然后在第7个图之后休息,第8个图从新页面开始(如在第14个,第21个等之后)。

我的清单包含(目前有84 ggplots,未来可能更多)

我看了ggplot list of plots to one pdf with different page layouts,但我不想单独设置每个页面,因为它们有很多(我也可能希望每次更改为3或4页)最初的那些并且不想重新工作。

我已经使用钻石数据框做了一个例子,假设我想拆分页面,所以两个不同的清晰度的图表不在同一页面上

egsplitdf <- diamonds %>% distinct(color, clarity) %>% arrange(clarity)
egPlotfun <- function(i, filterdf){
  dat = filter(diamonds, color == filterdf[["color"]][i] & clarity == 
       filterdf[["clarity"]][i])
  ggplot(dat, aes(x= x, y = y))+
       geom_point()+
       labs(title = paste(filterdf[["clarity"]][i], filterdf[["color"]][i]))
}

egPlots <- lapply(1:56, egPlotfun,filterdf = egsplitdf)
ArrangedPlots <- marrangeGrob(egPlots, nrow = 2, ncol = 1)
ggsave("egNotsplit.pdf", ArrangedPlots, height = 10,width = 7)

但是这只是连续的情节,在7等之后没有休息。 我也尝试将我的情节分成

列表
plotseq <- lapply(0:8,function(x) seq(from = (x*7+1), length.out = 7))
ListofPlots <- lapply(plotseq, function(x) lapply(x, egPlotfun, filterdf = egsplitdf ))
testSplit <-marrangeGrob(ListofPlots , nrow = 2, ncol = 1)
ggsave("TrySplit.pdf", testSplit, height = 10,width = 7)

但这给出了: &#34; gList中的错误(list(list(data = list(carat = c)(0.32,1.01,0.43,1.22,:   只有&#39; grobs&#39;允许进入&#34; gList&#34;&#34;

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

试试这个,

enter image description here

library(gridExtra)
library(ggplot2)

pl <- lapply(1:84, function(i) ggplot() + ggtitle(i))

spl <- split(pl, (seq_along(pl)-1) %/% 7)
ppl <- lapply(spl, function(g) marrangeGrob(grobs = g, layout_matrix = matrix(c(1,2))))

pdf("test.pdf")
print(ppl)
dev.off()