r - 在 for 循环中以 pdf 格式保存 2-plot 图

标签 r for-loop plot save

我有多个图要保存为 .pdf 文件,它们是在 R 中使用 par(mfrow=c(1,2)) 创建的,即每个图图(待保存)有2个地 block 按1行2列排列。

由于我的地 block 总数相当高,所以我使用 for 循环创建地 block 。

如何在 for 循环中将图形(每个图形有 2 个图)保存为 pdf 文件?

这是同样时髦的代码:

## create data.frames
df_1 = data.frame(x = c(1:100), y = rnorm(100))
df_2 = data.frame(x = c(1:100), y = rnorm(100))
df_3 = data.frame(x = c(1:100), y = rnorm(100))
df_4 = data.frame(x = c(1:100), y = rnorm(100))

## create list of data.frames
df_lst = list(df_1, df_2, df_3, df_4)

## plot in for loop by 1 row and 2 cols
par(mar=c(3,3,1,0), mfrow=c(1,2))

for (i in 1:length(df_lst)) {
    barplot(df_lst[[i]]$y)
}

假设我想用 pdf 函数保存绘图。这是我尝试过的:

for (i in 1:length(df_lst)) {
    pdf(paste('my/directory/file_Name_', i, '.pdf', sep = ''), height = 6, width = 12)
    barplot(df_lst[[i]]$y)
    dev.off()
}

我的解决方案显然是错误的,因为 pdf 函数在每个循环中保存一个数字(即 4 而不是 2)。

有什么建议吗? 谢谢

最佳答案

听起来您可以在此处使用嵌套循环:您创建的每个文件都有一个外循环,您创建的每个多面板图形都有一个内循环。由于所有数据框都存储在一维列表中,因此您需要跟踪正在绘制的列表的索引。

这是一种方法:

nrow <- 1
ncol <- 2
n_panels <- nrow * ncol
n_files <- length(df_lst) / n_panels

for (i in seq_len(n_files)) {
  file <- paste0("file_", i, ".pdf")

  pdf(file, height = 6, width = 12)
  # plot params need to be set for each device
  par(mar = c(3, 3, 1, 0), mfrow = c(nrow, ncol))

  for (j in seq_len(n_panels)) {
    idx <- (i - 1) * n_panels + j
    barplot(df_lst[[idx]]$y)
  }

  # updated to also add a legend
  legend("bottom", legend = "Bar", fill = "grey")

  dev.off()
}

如果你只是想要一个文件有多个页面,你需要做的就是将 pdf() 调用移到原来的循环之外,并将参数设置移到 pdf() 之后:

pdf('my/directory/file_Name.pdf', height = 6, width = 12)
par(mar=c(3,3,1,0), mfrow=c(1,2))
for (i in 1:length(df_lst)) {
    barplot(df_lst[[i]]$y)
}
dev.off()

关于r - 在 for 循环中以 pdf 格式保存 2-plot 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51422599/

相关文章:

R 将列表转换为小写

windows - FOR 循环内的 WHILE 循环批量

图中的 R 科学记数法

matlab - 如何在 MATLAB 中绘制水平直方图?

MySql-多个where条件

R 抑制依赖项中的startupMessages

javascript - 在循环结束之前使用 for 循环的每个值

javascript - 在javascript中对多维数组进行排序?

python - 如何在 Python 中使用日期时间和 scipy 峰值进行绘图?

r - 如何在 R 中以固定间隔替换序列中的向量值?