2017-04-19 10 views
1

複数のページにわたって次のlayout_matrixを使用してプロットを配置します。複数のページにわたってgrid.arrangeを使用するか、またはlayout_matrixでmarrangeGrobを使用します。

enter image description here

担当者。例えば

library(gridExtra) 
library(ggplot2) 

layout <- rbind(c(1,2,3,4), 
        c(1,2,3,4), 
        c(1,2,3,4), 
        c(5,5,5,5)) 
p <- list() 
for(i in 1:15) { 
    ifelse(i %% 5 > 0, 
     p[[i]] <- ggplot(mtcars, aes(wt, mpg)) + geom_point() + ggtitle(paste("plot:",i)), 
     p[[i]] <- tableGrob(mtcars[5:7,],rows = NULL) 
    ) 
} 

私は1ページのみがある場合:私は複数のページをしたい場合は(簡単に)

grid.arrange(grobs=p[1:5],layout_matrix=layout) 

を:(私はすべての私のパターンを失う)

marrangeGrob(grobs=p,nrow=4,ncol=2) 

PLSは、一般的に私を助けて複数のページにlayout_matrixを持つソリューション

答えて

3

これが動作しているようですが、場合にあなたがこれよりもより洗練何かを必要とするので、

marrangeGrobは、ループとgrid.arrangeのための周りだけ薄いラッパーです(確かに偶然に)

marrangeGrob(grobs=p, nrow=1, ncol=5, layout_matrix=layout) 

幸運な回避策はおそらくあなたのニーズにコードを変更する必要があります。

+0

はどういうわけか、その場合には完璧に動作します。 –

+0

を共有してくれてありがとうございました.NOAフィールドを含む複雑でレイアウトの異なるカップルでテストしました。すべての時間を動作させる!それは本当の解決策です。 –

0

私の独自の機能を使って、複数のgrid.arrangeファイルをレイアウトにしてから、marrangeGrobを複数ページのオブジェクトにします。

m.grid.arrange <- function(p,topnames,layMat) { 
    pdf(file = NULL) #invisible 
    plotsPerPage <- length(unique(na.omit(c(layMat)))) 

    ml <- lapply(1:ceiling(length(p)/plotsPerPage), function(page_IND){ 
     ind <- (1+((page_IND-1)*plotsPerPage)):(page_IND*plotsPerPage) 
     grid.arrange(grobs = p[ind], layout_matrix = layMat,top=topnames[page_IND]) 
    }) 

    return(marrangeGrob(grobs=ml,nrow=1,ncol=1,top=NULL)) 
    dev.off() #invisible 
} 

は、次に使用:

ml <- m.grid.arrange(p=p,topnames=c("1 label","2 label","3 label"),layMat = layout) 
ggsave("gridMeHard.pdf",width = 297, height = 210, units = "mm", ml) 
関連する問題