【问题标题】:Plot graphs in R by loop and save it like jpeg在 R 中循环绘制图形并像 jpeg 一样保存
【发布时间】:2015-11-09 23:12:43
【问题描述】:

我正在尝试循环绘制图表。

输入数据:表格,以*depth.txt结尾,表格中有2个制表符分隔的列:

Baba"\t"58.38

Tata"\t"68.38

Mama"\t"30.80

jaja"\t"88.65

输出:我想为所有文件(轴 x 将是表中的第一列)的每个 *depth.txt(它们的名称将与表的名称相同)获取一个带有 plot() 的 jpeg 文件轴 y 将是第二列)

我创建了脚本的一部分,但它不起作用:

files <- list.files(path="/home/fil/Desktop/", pattern="*depth.txt", full.names=T,recursive=FALSE)

for (i in 1:length(files))
plot(read.table(files[i],header=F,sep="\t")$V1,read.table(files[i],header=F,sep="\t")$V2)
dev.copy(jpeg,filename=files[i])
dev.off

它不起作用,你能帮帮我吗?我是 R 的初学者。

【问题讨论】:

  • 尝试在{ ... }中包含循环体。
  • 我试过了,这是个好主意,但我仍然只收到一个.jpeg,有两个图表(第一个是好的,但第二个是错误的值)并且 jpeg 的名称是也错了:-(
  • 奇怪 - 我前段时间也尝试过类似的方法,但也没有用。期待解决方案。那时,我只是使用par(mfrow=c(3,4))(如果放在循环之前,会将所有图形绘制在一页上,水平 3 个,垂直 4 个),然后最后保存整个图...

标签: r for-loop plot


【解决方案1】:

下面会做你想要的吗?

for (i in 1:length(files)) {
  dat <- read.table(files[i], header = FALSE, sep = '\t')
  jpeg(file = paste(files[i], '.jpeg', sep = ''))
  plot(dat$V1, dat$V2)
  dev.off()
}

【讨论】:

  • 是的,它可以工作,但它会重写我的 .txt 文件,但输出解释是我的错。是否可以在不覆盖的情况下创建图形?感谢您的工作脚本。我看到我很接近,但我怎么说我是 R 的初学者 :-( 非常感谢..
  • 亲爱的 Lars,感谢您的大力帮助。它只缺少一个 ) ,但这不是错误。非常感谢
【解决方案2】:

与前两个类似,但更改了绘图的文件名

files <- paste("fil",1:3,"depth.txt",sep="")      #  example file names
for( i in 1:length(files))  {
     filename <-  sub(".txt",".jpg",files[i])
     jpeg(file=filename)
     plot(1:(10*i))                             # example plots
     dev.off()
}

【讨论】:

    【解决方案3】:

    重命名文件?

    for (i in 1:length(files)) {
        file = files[i]
        file = paste("jpg",file,sep="_")
        jpeg(file)
        plot(read.table(files[i],header=F,sep="\t")$V1,read.table(files[i],header=F,sep="\t")$V2)
       dev.off()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多