绘制多个页面

时间:2010-08-03 16:27:12

标签: r ggplot2

我正在尝试编写一个在多个页面上绘制ggplot facet_wrap图的函数。这只是一个黑客,因为这个功能似乎在ggplot2功能待办事项列表中。我做了一些小的计算,找到了我需要的页数,我每页需要的data.frame行数等等。我非常有信心这一切都有效。

pdf(filename)
for (i in seq(num_pages)){
    slice = seq(((i-1)*num_rows)+1,(i*num_rows))
    slice = slice[!(slice > nrow(df.merged))]
    df.segment=df.merged[slice,]
    p <- ggplot(df.segment, aes(y=mean,x=phenotype))
    p <- p + geom_bar(stat="identity",fill="white",colour="black") 
    p + facet_wrap("ID",scales="free_y",ncol=n_facets,nrow=n_facets)
}
dev.off()

我的问题是,通过将它全部包含在这样的for循环中,在pdf()dev.off()函数之间,for循环似乎不等ggplot到做它的事情,并迅速开始循环并输出无效的PDF。

如果我设置i = 1,请启动pdf(),在for循环中运行上面的代码,然后设置i=2,然后运行代码,依此类推,直到我感到无聊( i=3)然后关闭设备,结果PDF很棒。

有没有办法在进入下一次迭代之前让for循环等待最后一行完成绘图?

2 个答案:

答案 0 :(得分:31)

我认为问题在于你需要在最后一行(p + ...)周围打印()以使其实际打印到for循环内的设备。 。 。

答案 1 :(得分:5)

完全。 ggplot2书的第39页告诉我们,当你创建ggplot2对象时,你可以“在屏幕上渲染它,带有print()。这会在交互式运行时自动发生,但在循环或函数内,你需要print()它自己“。