如何保存 par(mfrow) 和 lapply 生成的几张图?

问题描述 投票:0回答:1

我正在尝试将使用

par(mfrow)
获得的所有绘图保存在我的电脑中。这个想法是保存每个 png 图像并添加一个数字以避免替换。

这是一个玩具示例,我使用

lapply
par(mfrow)
生成多个直方图。

par(mfrow=c(1,2))
  lapply(1:ncol(mtcars), function(x){
    hist(mtcars[,x])
  })

我尝试过(没有成功)的是使用另一个

lapply
以不同的名称保存图像。

lapply(1:ceiling(ncol(mtcars)/2), function(n){
  
  png(paste0("../Desktop/histogram_", n, ".png"))
  
  par(mfrow=c(1,2))
  lapply(1:ncol(mtcars), function(x){
    hist(mtcars[,x])
  })
  dev.off()
})

它在 50% 时工作。它以不同的名称保存不同的直方图,但它多次保存最后一个图。

如何将第一个图保存到最后一个图?

重要提示:我不想保存每个单独的直方图,我想保存每个图像中保留的每对直方图。

我找到了一个类似的post来执行此操作,但它使用 for 循环和 if 语句(我想避免的东西)。

任何帮助将不胜感激。

提前致谢

r plot png lapply par
1个回答
1
投票

怎么样

lapply(
  seq(1, ncol(mtcars), 2),
  function(x) {
    png(paste0("histogram_", x, ".png"))
    par(mfrow=c(1, 2))
    hist(mtcars[, x])
    if (x < ncol(mtcars)) hist(mtcars[, (x+1)])
    dev.off()
  }
)

在成对的列上运行该函数...

编辑

为了回答OP在评论中提出的问题,这里有一个变体,适用于任意数量的行和列以及任何数据框(仅包含数字列)。

makePlots <- function(df, nr, nc) {
  k <- nr * nc
  lapply(
    seq(1, ncol(df), k),
    function(x, df, nr, nc) {
      png(paste0("histogram_", x, ".png"))
      par(mfrow=c(nr, nc))
      for (z in x:(x+k-1)) {
        if (z <= ncol(df)) hist(df[, z])
      }
      dev.off()
    },
    nr = nr,
    nc = nc,
    df = df
  )
}

makePlots(mtcars, 3, 2)
© www.soinside.com 2019 - 2024. All rights reserved.