嵌套的mfrow和布局

时间:2014-04-17 17:11:11

标签: r graphics

我有一个绘图功能,只使用基本图形绘制一个双窗格图,使用layout。我想要的是遍历数千个对象,并将图表保存到.pdf文件中,每页有三个双窗格图。

快速虚拟示例:

examplefunc <- function() {  
  layout(mat = matrix(1:2, nrow = 1), widths = 3:4, heights = 3)
  plot(0)
  plot(0)
}

pdf("exmaple.pdf", height = 10, width = 8)
par(mfrow = c(3,1)) # Also tried using layout here.
examplefunc()
examplefunc()
examplefunc()
graphics.off()

输出是三页.pdf,而不是所需的一页.pdf,带有三个数字。我想继续使用布局来确保数字的比例正确。

2 个答案:

答案 0 :(得分:2)

正如layout的帮助页面所述,它与par(mfrow和其他形式的多重绘图不一致,并使用layout覆盖而不是先前调用layout 。所以这将非常困难。

最简单的方法是从函数中删除对layout的调用,并在函数外部设置6个面板的网格。如果您编写了该函数,那么这是直截了当的,但如果使用包中的函数则会变得更加困难。您可以在没有layout的情况下创建自己的函数版本,或者某些函数可以选择仅绘制其中一个图(并且您只需多次调用它)。

另一种方法是将pdf文件设置为通常高度的1/3并将每对绘制成一页,然后使用外部工具组合3组。像Imagemagick或pdftk这样的工具可能有所帮助。

答案 1 :(得分:0)

每次拨打layoutpar时,都会创建一个新的绘图窗口。相反,您应该只调用layout一次。例如,

examplefunc <- function() {  
  plot(0); plot(0)
}

然后

pdf("/tmp/exmaple.pdf", height = 10, width = 8)
layout(mat = matrix(1:6, ncol = 2, byrow=T), widths = 3:4, heights = c(3, 3, 3))
examplefunc()
examplefunc()
examplefunc()
graphics.off()

您可以通过

查看地块的布局
layout(mat = matrix(1:6, ncol = 2, byrow=T), 
                widths = 3:4, heights = c(3, 3, 3))
layout.show(6)