【问题标题】:How to create multiple pdf for multiple plot in R?如何在 R 中为多个绘图创建多个 pdf?
【发布时间】:2020-01-16 18:03:53
【问题描述】:

对于每个种子,我有两个地块。对于三个种子,所有六个地块都保存在一个 pdf 中。但我希望它们在每个种子的单独 pdf 中。例如,对于第一个种子,我想要两个 pdf,一个用于sample[,1],另一个用于sample[,2]。其余种子也是如此。

pdf(file = "example plots.pdf")
library(LearnBayes)
seeds <- c(314159,523626,626789)
for (seed in seeds) {
  set.seed(seed)
  x <- c(11, 5, 2, -5, 7, 2, -11, 9, -5, -5, -4, 17, 2, -10, -11, -10,
         -4, 2, 1, 13)
  a <- 0.1
  b <- 0.1
  c <- 0
  d <- 100^2
  M <- 1e3
  sample <- array(NA, dim=c(M,2))
  mu <- mean(x)
  sig2 <- var(x)
  for( m in 1:M ){
    mu <- rnorm(1, (length(x) + 1/d)^(-1) * (sum(x) + c/d),
                sqrt( sig2/(length(x) + 1/d) ))
    sig2 <- rigamma(1, .5*length(x)+a+.5,
                    .5*sum( (x-mu)^2 ) + 1/(2*d)*(mu-c)^2 + b )
    sample[m,] <- c(mu,sig2)
  }

  par(mfrow=c(1,2))
  plot( density( sample[,1] ), main=paste("plot_1 for seed", seed))
  plot( density( sample[,2] ), main = paste("plot_2 for seed", seed))
  setwd("C:/Users/mnudd/Desktop/StackExchange")
  save(sample,file =paste0("hrs_sample_4Q_", seed, ".RData"))

}
dev.off()

【问题讨论】:

  • 你可以在for循环中移动pdfdev.off
  • 我只得到了第一个种子的 pdf。

标签: r pdf plot


【解决方案1】:

这是您的代码,经过一些修改(用 cmets 标记),可以根据需要保存图。前面的代码的问题是你覆盖了你的 pdf 图,因为它只被称为pdf(file = "example plots.pdf")。我修改了代码,以便您保存 3 个具有不同名称的 pdf 图。

#Moved wd outside the loop
setwd("C:/Users/mnudd/Desktop/StackExchange")
for (seed in seeds) {
  set.seed(seed)
  x <- c(11, 5, 2, -5, 7, 2, -11, 9, -5, -5, -4, 17, 2, -10, -11, -10,
         -4, 2, 1, 13)
  a <- 0.1
  b <- 0.1
  c <- 0
  d <- 100^2
  M <- 1e3
  sample <- array(NA, dim=c(M,2))
  mu <- mean(x)
  sig2 <- var(x)
  for( m in 1:M ){
    mu <- rnorm(1, (length(x) + 1/d)^(-1) * (sum(x) + c/d),
                sqrt( sig2/(length(x) + 1/d) ))
    sig2 <- rigamma(1, .5*length(x)+a+.5,
                    .5*sum( (x-mu)^2 ) + 1/(2*d)*(mu-c)^2 + b )
    sample[m,] <- c(mu,sig2)
  }

  par(mfrow=c(1,2))
  #Moved pdf inside the loop and modified the name of the saved file
  pdf(file = paste0("example_plots_", seed,".pdf"))
  plot( density( sample[,1] ), main=paste("plot_1 for seed", seed))
  plot( density( sample[,2] ), main = paste("plot_2 for seed", seed))
  #Moved dev.off inside the loop
  dev.off()

  save(sample,file =paste0("hrs_sample_4Q_", seed, ".RData"))

}

【讨论】:

    【解决方案2】:

    基本上,您可以将例程包装到一个函数中并运行sapply 循环。

    seeds <- c(314159, 523626, 626789)
    
    FUN <- function(x) {
      pdf(paste0("file", x, ".pdf"))  # initialize .pdf device
      set.seed(x)  # use seed from `sapply` loop
      # do stuff and plot.............................
      samp <- replicate(2, rnorm(1e3), simplify=FALSE)
      op <- par(mfrow=c(1, 2))
      lapply(samp, plot)
      par(op)
      # ..............................................
      dev.off()  # close .pdf device
      }
    sapply(seeds, FUN)
    

    注意:除非您指定位置pdf(paste0("&lt;LOCATION&gt;/file", x, ".pdf")),否则 PDF 将保存到您的 getwd()

    【讨论】:

      猜你喜欢
      • 2021-01-10
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多