我有一个绘图功能,只使用基本图形绘制一个双窗格图,使用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,带有三个数字。我想继续使用布局来确保数字的比例正确。
答案 0 :(得分:2)
正如layout
的帮助页面所述,它与par(mfrow
和其他形式的多重绘图不一致,并使用layout
覆盖而不是先前调用layout
。所以这将非常困难。
最简单的方法是从函数中删除对layout
的调用,并在函数外部设置6个面板的网格。如果您编写了该函数,那么这是直截了当的,但如果使用包中的函数则会变得更加困难。您可以在没有layout
的情况下创建自己的函数版本,或者某些函数可以选择仅绘制其中一个图(并且您只需多次调用它)。
另一种方法是将pdf文件设置为通常高度的1/3并将每对绘制成一页,然后使用外部工具组合3组。像Imagemagick或pdftk这样的工具可能有所帮助。
答案 1 :(得分:0)
每次拨打layout
或par
时,都会创建一个新的绘图窗口。相反,您应该只调用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)