我正在进行循环操作,该操作从两个数据帧(obs& sim)的同一列读取并生成散点图。 。每个数据框中共有24列。以下脚本工作正常。
for(i in 1:24) {
plot (obs[,i],sim[,i],xlab="obs",ylab="sim",main=substitute(paste('Lead Time (hrs) = ', a), list(a=i)))
}
但是我想保存文件夹中的每个图(C:/ RPlots /),我想在循环中也包含这个操作。
我使用了以下脚本,但它没有工作
for(i in 1:24) {
jpeg('C:/RPlots/paste("myplot_", c(i), ".jpg")')
plot (obs[,i],sim[,i],xlab="obs",ylab="sim",main=substitute(paste('Lead Time (hrs) = ', a), list(a=i)))
dev.off()
}
任何人都可以帮助我吗?
答案 0 :(得分:5)
您在jpeg
电话
试试这个
for(i in 1:24) {
jpeg(paste0("C:/RPlots/myplot_",i,".jpg"))
plot (obs[,i],sim[,i],xlab="obs",ylab = "sim",
main = substitute(paste('Lead Time (hrs) = ', a), list(a = i)))
dev.off()
}
答案 1 :(得分:2)
您可以使用paste
,paste0
或sprintf
来创建名称,但在文件参数中使用整数格式会更简单。
例如,如果使用如下命令启动jpeg设备:
jpeg('C:/RPlots/myplot_%03d.jpg')
在循环之前,然后在循环中创建多个图,然后第一个图将保存在文件myplot_001.jpg中,第二个图保存在myplot_002.jpg中,第三个图保存在myplot_003.jpg中等。
"%03d"是重要的部分,3表示你想要3位数字,0表示用0填充它们。根据你的喜好进行调整。
答案 2 :(得分:0)
正如@Greg Snow所提到的,如果你出于某种原因无法将jpeg()
函数放在循环之外,那么C库的成名就会sprintf()
:
paste0("C:/RPlots/myplot",sprintf("%03d",i),".jpg")
这里,i
是来自for循环迭代器的整数。这将设置前导零填充,如果您希望稍后使用ffmpeg
等迭代这些图像,这很好。