如何保存在循环中创建的图表对象

时间:2015-08-18 18:13:47

标签: r graphics plot charts save

我在几个循环中创建了一个图表,我想自动将图表写入外循环末尾的文件中。这是一个玩具示例:

filename <- "mychart"
for(i in 1:5) {
  x <- 1:5
  fun1 <- sample(1:10, 5, replace = TRUE)
  xlim <- c(1, 5)
  ylim <- c(0, 10)
  plot(x, fun1, xlim = xlim, ylim = ylim, type = "l")
  for(j in 1:3)  {
    fun2 <- 2:6 + j
    lines(x, fun2, type = "l", col = "red")
  }
  out.filename <- paste(filename, i, sep = "")
  ## want to save this plot out to disk here!
}

我还想在控制台上创建情节,以便观看节目的进度。类似问题的大多数答案似乎都涉及使用单个“plot”语句创建的绘图,或者不启用控制台绘图窗口。任何建议都非常赞赏。

2 个答案:

答案 0 :(得分:1)

我认为这就是您所追求的目标:

plotit <- function(i) {
   x = 1:5
   fun1 = sample(1:10, 5, replace=TRUE)
   plot(x, fun1, xlim=c(1,5), ylim=c(0,10), type="l")
   for(j in 1:3)  {
       fun2 = 2:6 + j
       lines(x, fun2, type = "l", col = "red")
   }   
   savePlot(paste0("mychart", i, ".png"), type="png")
}

然后:

for(i in seq(5)) plotit(i)

答案 1 :(得分:0)

保存基本图形图的典型方法是使用单个设备功能,例如pdf()png()等。使用适当的文件名打开绘图设备,创建绘图,然后关闭设备与dev.off()。如果您的绘图是在for循环中创建的,则无关紧要。查看?png中的大量设备(以及底部的示例)。

对于你的代码,它会是这样的:

filename <- "mychart"
for(i in 1:5) {

    out.filename <- paste(filename, i, ".png", sep = "")
    ## Open the device before you start plotting
    png(file = out.filename)
    # you can set the height and width (and other parameters) or use defaults

    x <- 1:5
    fun1 <- sample(1:10, 5, replace = TRUE)
    xlim <- c(1, 5)
    ylim <- c(0, 10)
    plot(x, fun1, xlim = xlim, ylim = ylim, type = "l")
    for(j in 1:3)  {
        fun2 <- 2:6 + j
        lines(x, fun2, type = "l", col = "red")
    }
    ## Close the device when you are done plotting.
    dev.off() 
}