2017-03-01 118 views
0

我对R很陌生,遇到了一个我无法根据我的知识/书籍/互联网解决的问题。使用R绘制多个.csv文件中的多个图形

所以这里的问题是:

我有60个CSV文件,我想每个绘制散点图。 它们的格式都一样,所以我应该(理论上)能够用一个很好的循环来解决这个任务。 这里是我的代码:

library(tools) 
library(ggplot2) 
files = dir('~/Klima_hist_CPL/tillnov/ClimDatK1/*.csv') 
for (Y in list.files(path = "~/Klima_hist_CPL/tillnov/ClimDatK1/",pattern =".csv", 
    all.files = FALSE, full.names = TRUE, recursive = FALSE, 
    ignore.case = FALSE, include.dirs = FALSE, no.. = FALSE)){ 
myData<-read.csv(Y) 
pdf("~/Klima_hist_CPL/tillnov/ClimDatK1/mypdf.pdf", width = 4, height = 4) 
print(ggplot(data = myData, aes(ACTION_DATE, TEMP)) 
    + geom_point(aes(x = myData$ACTION_DATE, y = myData$TEMP_SET),colour=('blue')) 
    + geom_point(aes(x = myData$ACTION_DATE, y = myData$TEMP_MEASURED), colour=('red'))) 
#newFilename <-paste(file_path_sans_ext(basename(Y)),".jpg") 
#fp <-paste('~/Klima_hist_CPL/tillnov/ClimDatK1/',newFilename) 
#writeJPEG(output,file=fp,append=FALSE) 
dev.off() 
} 

正如你可以看到我尝试了一下周围,并从以前的任务中使用的代码片段。不幸的是,它们在合并时不起作用。

总结:

  • 多个CSV文件
  • 所有格式相同
  • 每一个应该被绘制
  • 我不在乎,如果这导致一个PDF或其中60

回答

2

我会阅读所有的数据到一个大data.frame和使用方面作出的所有地块中ggplot2。一些伪代码示出了一般的代码图案:

library(dplyr) 
list_of_dfs = lapply(list.files('path/to/files', pattern = '*csv'), 
    function(x) { 
     dat = read.csv(x) 
     dat$fname = x 
     return(dat) 
    }) 
one_big_df = list_of_dfs %>% bind_rows() 
one_big_df %>% ggplot(aes(x = x, y = y)) + geom_point() + facet_wrap(~ fname) 

保存情节然后可以使用ggsave进行;

ggsave('plot.png', width = 16, height = 9) 
+0

非常感谢! 我试过你的方法,但被一些错误阻碍了。 但终于我设法调试我自己的代码,现在它工作! – Julius

+0

如果您有任何具体问题,请随时咨询更多关于SO的问题。 –

0

这里是我工作(只是伸出援助之手,有人用类似的问题所困扰)

底线是追加full.names = T

files<-list.files(path = "~/Klima_hist_CPL/tillnov/ClimDatK1/", pattern = ".csv", full.names = T)

library(tools) 
library(ggplot2) 
files<-list.files(path = "~/Klima_hist_CPL/tillnov/ClimDatK1/", pattern = ".csv", full.names = T) 
for (Y in files){ 
    myData<-read.csv(Y); 
    fname <- basename(Y); 
    fname <- substr(fname, 1, nchar(fname) - 4); 
    pdf(
    sprintf("~/Klima_hist_CPL/tillnov/ClimDatK1/%s.pdf", fname), 
    width = 10, 
    height = 8 
); 
    print(ggplot(data = myData, aes(ACTION_DATE, TEMP)) + 
     geom_point(aes(x = myData$ACTION_DATE, y = myData$TEMP_SET),colour=('blue')) + 
     geom_point(aes(x = myData$ACTION_DATE, y = myData$TEMP_MEASURED), colour=('red'))) 
    dev.off() 
} 
+0

你能解释一下你的问题中的例子出了什么问题吗?现在我们必须自己做这件事,并猜测确切的修复是什么。 –

+0

肯定的: 我总是得到此错误消息: _Error文件(文件,“RT”):无法打开连接 另外:警告消息: 在文件(文件,“RT”): 不能打开文件“1-2016.csv”:没有这样的文件或directory_ 通过附加'full.names = T'文件可以发现,循环工作 – Julius

+0

啊,这是一个经典的错误:),我已经那几次我自己。你能将这些信息编辑成答案吗?并非所有人都阅读评论。 –