【问题标题】:Creating a list of plots using a for loop使用 for 循环创建绘图列表
【发布时间】:2020-06-18 18:48:47
【问题描述】:

我在使用 for 循环 创建绘图列表时遇到问题,我不知道为什么。

这是不起作用的代码(即,将 aplotfinal 作为空列表返回)


aplotfinal <- list()
for(i in 1:length(Rlist)){
  a <- Rlist[[i]] %>%
    select(Frame_times, average)
  del <- 0.016667
  x.spec <- spectrum(a$average, log = "no", plot = FALSE)
  spx <- x.spec$freq/del
  spy <- 2*x.spec$spec
  aplotfinal[[i]] <- plot(spy~spx, main = names(Rlist)[i], xlab = "frequency", ylab = "spectral density", type = "l")
}

plot 函数有效,我只想将它应用于我拥有的数据帧列表(即Rlist)。谢谢!

【问题讨论】:

标签: r list for-loop


【解决方案1】:

基础 R plot() 不返回对象,它只是在设备上绘制。因此,您必须进行多图或保存到 pdf 以记录图。

要将其存储在列表中,我想您需要类似 ggplot 的东西,例如:

library(ggplot2)
library(gridExtra)

Rlist = lapply(1:5,function(i){
data.frame(Frame_times = seq(0,1,length.out=100),average=runif(100))
})
names(Rlist) = letters[1:5]

aplotfinal <- lapply(1:length(Rlist),function(i){
  a <- Rlist[[i]] %>% select(Frame_times, average)
  del <- 0.016667
  x.spec <- spectrum(a$average, log = "no", plot = FALSE)
  spx <- x.spec$freq/del
  spy <- 2*x.spec$spec
  aplotfinal[[i]] <- qplot(y = spy,x=spx,geom="line") + 
  ggtitle(names(Rlist)[i]) + 
   xlab("frequency")+ylab("spectral density")
})

grid.arrange(grobs=aplotfinal,ncol=5)

【讨论】:

    【解决方案2】:

    这是一个可用于调整代码的示例。绘图保存到plot_list 变量,然后保存到位于path/to/pdf 的pdf。请注意,您必须先启动设备(在我的情况下,pdf)。

    library(ggplot2)
    library(dplyr)
    
    df <- data.frame(country = c(rep('USA',20), rep('Canada',20), rep('Mexico',20)),
                     wave = c(1:20, 1:20, 1:20),
                     par = c(1:20 + 5*runif(20), 21:40 + 10*runif(20), 1:20 + 15*runif(20)))
    
    countries <- unique(df$country)
    
    plot_list <- list()
    i <- 1
    
    for (c in countries){
      pl <- ggplot(data = df %>% filter(country == c)) +
        geom_point(aes(wave, par), size = 3, color = 'red') +
        labs(title = as.character(c), x = 'wave', y = 'value') +
        theme_bw(base_size = 16)
    
      plot_list[[i]] <- pl
      i <- i + 1
    }
    
    pdf('path/to/pdf')
    pdf.options(width = 9, height = 7)
    for (i in 1:length(plot_list)){
      print(plot_list[[i]])
    }
    dev.off()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多