【问题标题】:use grid.arrange over multiple pages or marrangeGrob with a layout_matrix在多个页面上使用 grid.arrange 或使用带有 layout_matrix 的 marrangeGrob
【发布时间】:2019-04-11 16:43:11
【问题描述】:

我想在多个页面上排列具有以下 layout_matrix 的图。

代表。例如

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)
    )
}

如果我只有一页:(简单)

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

如果我想要多页:(我失去了所有的模式)

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

请帮助我提供一个通用解决方案,在多个页面上使用 layout_matrix。

【问题讨论】:

    标签: r ggplot2 gridextra r-grid


    【解决方案1】:

    这似乎可行,

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

    (当然是偶然的)

    marrangeGrob 只是 for 循环和 grid.arrange 的一个薄包装,所以如果您需要比这个幸运的解决方法更精致的东西,您可能应该根据需要修改代码。

    【讨论】:

    • 在这种情况下不知何故工作得很好。感谢分享
    • 用几个不同且更复杂的布局(包括 NA 字段)对其进行了测试。一直有效!这是一个真正的解决方案。
    【解决方案2】:

    制作了我自己的函数,将多个带有布局的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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      相关资源
      最近更新 更多