【问题标题】:Nested mfrow and layout嵌套 mfrow 和布局
【发布时间】:2014-04-17 17:11:10
【问题描述】:

我有一个绘图函数,它只使用基本图形来绘制一个两窗格图,使用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。我想继续使用布局来获得正确的数字比例。

【问题讨论】:

    标签: r graphics


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢。我确实在帮助页面中阅读过 - 我只是希望有一个解决方法。绘图函数是我为包编写的通用函数,所以我想我只需要改变我的整个方法。
    【解决方案2】:

    每次调用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)
    

    【讨论】:

    • 我理解我的方法存在的问题,但这种方法的问题是我无法为单个对象调用绘图函数。
    • 对不起,我不明白你的意思。
    • 我的绘图函数是plot 的通用方法,在我放在一起的包中。我想使用所写的通用绘图函数(具有指定的布局)来查看单个对象,或者在单个 .pdf 中绘制所有对象。我可能只需要改变整体方法。
    猜你喜欢
    • 2011-05-21
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多