用ggsave和ggplot2迭代

时间:2016-05-02 17:04:09

标签: r csv ggplot2

我有一个包含csv文件的文件夹。我正在迭代这些csv文件并为每个csv文件创建一个图。我可以通过以下方式做到这一点:

setwd("/myfiles/folder")
filenames = dir(pattern="*.csv")
for (i in 1:length(filenames)) { 
  tmp <-read.csv(filenames[i]); 
  print(ggplot(aes(x = count, y = time), data = tmp) + geom_point(aes(color = id)) 
      + geom_smooth(aes(color = id), method= "lm", se = F, formula=y ~ poly(x, 3, raw=TRUE)) 
      + ggtitle("Title") + labs(x="Count)",y="Time")+ggsave(file="ID_.jpeg"))
}

然而,正如您所期望的那样,这只会创建一个.jpeg文件,因此每次都会被覆盖,我将保留最终的情节。

我试过了:

for (i in 1:length(filenames)) { 
  tmp <-read.csv(filenames[i]); 
  print(ggplot(aes(x = count, y = time), data = tmp) + geom_point(aes(color = id)) 
       + geom_smooth(aes(color = id), method= "lm", se = F, formula=y ~ poly(x, 3, raw=TRUE)) 
       + ggtitle("Title") + labs(x="Count)",y="Time")+ggsave(file="ID"+id+".jpeg"))
}

但结果是:

  

regexpr中的错误(&#34; \。([[:alnum:]] +)$&#34;,x):object&#39; id&#39;找不到

为什么id以前没有被ggsave识别(对于geom_plot项目?)

2 个答案:

答案 0 :(得分:2)

试试这个,

for (ii in seq_along(filenames)) { 

  tmp <- read.csv(filenames[ii])

  p <- ggplot(aes(x = count, y = time), data = tmp) + 
          geom_point(aes(color = id)) + 
          geom_smooth(aes(color = id), method= "lm", se = F, 
                     formula=y ~ poly(x, 3, raw=TRUE)) + 
          ggtitle("Title") + 
          labs(x="Count)",y="Time")

  ggsave(file=paste0("ID", ii, ".png"), p)
}

答案 1 :(得分:1)

因为在ggplot中你提供的数据(在你的情况下是tmp)有一个列ID)。虽然在ggsave中它没有要求数据,所以当你给出一个列名ID时,ggsave不知道如何处理它。

我建议在ggsave中使用i(你的迭代器)。

for (i in 1:length(filenames)) { 
tmp <-read.csv(filenames[i]); 
print(ggplot(aes(x = count, y = time), data = tmp) +   geom_point(aes(color = id)) 
   + geom_smooth(aes(color = id), method= "lm", se = F, formula=y ~ p  oly(x, 3, raw=TRUE)) 
   + ggtitle("Title") + labs(x="Count)",y="Time")+ggsave(file=paste0("ID",i,".jpeg"))
}