安排多个ggplot2图表

4
我正在尝试创建许多图表(简单的x-y条形图),我希望以网格形式显示。当使用gridExtra包的grid.arrange时,随着绘图数量的增加,每个单独的绘图缩小。是否有一种方法可以创建跨越多个页面的绘图画布,而不缩小每个单独的绘图?
来自gridExtra的一个简单示例:
require(ggplot2)
require(gridExtra)
plots = lapply(1:50, function(.x) qplot(1:10,rnorm(10),main=paste("plot",.x)))
do.call(grid.arrange,  plots)

以上代码生成50个图表,但它们会被缩小以适应画布。是否有一种方法可以避免这种情况?例如,使它们跨越多个页面,每个页面大约有9个图表左右?我可以接受PNG或PDF文件格式。
在尝试grid.arrange之前,我尝试了这个网站的代码示例:http://gettinggeneticsdone.blogspot.com/2010/03/arrange-multiple-ggplot2-plots-in-same.html,但遇到了同样的问题。
我还没有尝试将不同的数据框组合成一个巨大的数据框,并使用绘图标识符进行分面,但我不确定它是否也会出现缩小每个图表的相同问题。
希望我的问题清楚明了...
谢谢, -e

3
重复的问题:https://dev59.com/i3A75IYBdhLWcg3wP2gg。 - Andrie
3
你会进行分面吗?你可以在九组中创建一个新的分面变量,并将其制作成多页pdf。 - Chase
@Andrie,谢谢!我之前用的关键词不对,没有发现那个链接。使用pdf()和在循环内进行打印非常好用。我会把伪代码放在答案里。@Chase,这是很好的想法。对于我的情况,我没有将东西存储在数据框中,所以我直接在循环内将其打印到pdf文件中。如果我有一个滚动的数据框,你的建议会更好用,因为我不需要grid.arrange。谢谢! - Ecognium
1个回答

8
library(gridExtra)
library(ggplot2)
my_func = function (d,filename = "filename.pdf") {
    pdf(filename,width=14) # width = 14 inches
    i = 1
    plot = list() 
    for (n in names(d)) {
        ### process data for plotting here ####
        plot[[i]] = qplot(x, y, geom="bar", data = my_data,)
        if (i %% 9 == 0) { ## print 9 plots on a page
            print (do.call(grid.arrange,  plot))
            plot = list() # reset plot 
            i = 0 # reset index
        }
        i = i + 1
    }
    if (length(plot) != 0) {  ## capture remaining plots that have not been written out
        print (do.call(grid.arrange,  plot))
    }
    dev.off()
}

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