在内部组合使用 `graphics::layout` 的绘图

问题描述 投票:0回答:1
  • 假设我有一个包装函数,可以生成实现“复杂”布局的绘图(写入图形设备)。
  • 调用包装函数会初始化一个新的图形框架(即,它不会返回 grob 或任何其他可以存储的对象)。
  • 那么我怎样才能组合多个这样的图呢?

这是一个表示:

simple_plot <- function(col = "black") {
  plot(x = 1:10, y = 1:10, col = col)
}

## wrapper function with a "complex" layout
plot_fun <- function() {
  mat <- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2, byrow = TRUE)
  lay <- layout(mat = mat)
  simple_plot(col = "red")
  simple_plot(col = "blue")
  simple_plot(col = "green")
  simple_plot(col = "black")
}

par(mfrow = c(2, 1))
simple_plot()
plot_fun()  # simple_plot() would obviously work
  • 我希望
    plot_fun()
    调用与常规
    plot()
    调用(作为一个“绘图对象”)类似地对待,如果这有意义的话......
  • 我认为可能有一种解决方法可以将绘图捕获为 grob 对象,然后使用
    grid.arrange()
    或类似的方法。
  • 这个问题与如何组合内部使用
    par(mfrow = ...)
    的图有一些相似之处(R | 组合内部使用 par(mfrow = ...) 的图) - 但是,那里提出的解决方案似乎有点老套,我想知道是否有一个简单、优雅的解决方案(或澄清为什么我的方法很幼稚)...
r layout graphics par
1个回答
0
投票

您可以捕获基本图形并使用

gridGraphics::echoGrob()
将它们转换为网格。这就是cowplot 包在幕后使用的内容。

就您而言,您只需这样做:

a <- gridGraphics::echoGrob(simple_plot)
b <- gridGraphics::echoGrob(plot_fun)

gridExtra::grid.arrange(a, b)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.