如何在循环内部将图表存储在列表中?

时间:2017-01-26 21:35:52

标签: r loops plot ggplot2

我正在循环中工作,我想将图表保存在列表中,以便我可以将它们一起绘制在.pdf中。问题是列表没有正确填充,并重新更新上次运行的结果。所以,最后得到的是一个包含五个完全相同元素的列表。

我知道循环可能看起来没用,但我只是让它们创建一个尽可能接近实际的测试代码(具有可重现的错误)。所以,我需要保持循环原样。

library (ggplot)
library (gridExtra)

plist <- list()

for (z in 1:5){
  n <- 100
  k <- seq(0, to=4500+z*2000, length=n)
  tmp <- numeric(n)
  for (i in 1:n){
    tmp[i] <- (5*(i*3)^2)}

  plist[[z]] <- ggplot() +
    geom_line(aes(x = k, y = tmp)) +
    theme_bw()

  pdf(sprintf("p%s.pdf", z),
      width = 6, height = 4, onefile = T)
  plot(plist[[z]])
  dev.off()
}

do.call(grid.arrange, c(plist, ncol = 5))

1 个答案:

答案 0 :(得分:1)

此答案基于:Storing plot objects in a list

library(ggplot2)
library(gridExtra)

plist <- list()

for (z in 1:5){
  n <- 100
  k <- seq(0, to=4500+z*2000, length=n)
  tmp <- numeric(n)
  for (i in 1:n){
    tmp[i] <- (5*(i*3)^2)}

  data <- data.frame(n, k, tmp)

  plist[[z]] <- ggplot(data = data) + #data needs to be given!!
    geom_line(aes(x = k, y = tmp)) +
    theme_bw()

  pdf(sprintf("p%s.pdf", z),
      width = 6, height = 4, onefile = T)
  plot(plist[[z]])
  dev.off()
}

do.call(grid.arrange, c(plist, ncol = 5))

enter image description here