我在使用 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
)。谢谢!
答案 0 :(得分: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)
答案 1 :(得分:1)
这是您可以用来调整代码的示例。绘图将保存到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()