如何自动绘制相同数量的行和列的许多CSV文件?

我有很多(100多个)具有相同表结构的csv文件,例如所有的表头都在第4行,它们都有6列,数据从第5行到第400001行,

我需要将这些数据绘制在散点图中,其中x表示第一列(40001时间单位),其他列是不同variables的Y,[如果我能够格式化一个图(颜色,范围,标题,图例,…)],并自动input这些csv文件,并导出png或pdf或其他可能有用的东西,我有Excel和R,但我不知道如何以有效的方式进行绘图。 (命名也很重要,他们应该有他们的CSV文件的名称)

任何想法,我怎么可以用较less的努力做到这一点?

谢谢

你的问题是关于具体细节的一点点,所以我要做一些假设,开始一种答案的骨架。

我们来制作一些伪造的CSV文件,例如数据

将工作目录设置为包含数据的文件夹

 setwd("C:/my-csv-files") 

制作500行的100个dataframe(保持快速)…

 df <- lapply(1:100, function(i) data.frame(cbind(1:500, matrix(sample(1000), 500, 5)))) 

从工作目录中的这些数据框中制作100个csv文件…

 lapply(1:length(df), function(i) write.csv(df[[i]],file=paste("df",i,"csv",sep="."))) 

现在我们可以重现你的问题,并快速阅读许多CSV文件到R像这样…

 # create a list of all CSV files in all the folders files <- (dir("C:/my-csv-files", recursive=TRUE, full.names=TRUE, pattern="\\.(csv|CSV)$")) # read in the CSV files and add the filename of each file as a column to # each dataset so we can trace back dodgy data # so, create a function to read the CSV and get filenames read.tables <- function(file.names, ...) { require(plyr) ldply(file.names, function(fn) data.frame(Filename=fn, read.csv(fn, ...)),.progress = 'text') } # execute function to read in data from each CSV, including file names of file that data comes from mydata <- read.tables(files, stringsAsFactors = FALSE) 

现在绘图数据 ,你说你只是想在CSV文件中的所有数据的一个情节…

融入绘图格式,这里X1是你的时间variables, X2X5是CSV文件中的其他variables

 require(reshape2) dat <- melt(mydata, id.vars = c("X1"), measure.vars = c("X2", "X3", "X4", "X5")) 

这里是其他variables(颜色编码)的时间variables的单个散点图。 从你的问题来看,你并不清楚你想要绘制什么,所以不要问更多的细节问题。

 require(ggplot2) ggplot(dat, aes(X1, value)) + geom_point(aes(colour = factor(variable))) 

现在, 将其保存为PDF或PNG格式 ,请参阅?ggsave以查看众多选项。

 ggsave(file="myplot.pdf") ggsave(file="myplot.png") 

find这些文件的位置

 getwd() 

要为每个CSV文件创build一个绘图,这里有一个方法

 listcsvs <- lapply(files,function(i) read.csv(i, stringsAsFactors = FALSE)) names(listcsvs) <- files require(reshape2) require(ggplot2) for (i in 1:length(files)) { tmp <- melt(listcsvs[[i]], id.vars = "X1", measure.vars = c("X2", "X3", "X4", "X5")) print(ggplot(tmp,aes(X1, value)) + geom_point(aes(colour = factor(variable))) + ggtitle(names(listcsvs[i])) ) } 

如果您正在使用RStudio ,则可以滚动浏览图表,然后将想要保存的图表导出为PDF或PNG格式

所以这涵盖了你的问题的主要部分:

  1. 将大量的CSV文件读入R中
  2. 绘制数据作为一个散点图,显示一个variables的几个variables
  3. 将数据绘制为每个CSV文件的散点图
  4. 将绘图保存为PDF或PNG文件

作为奖励,您已经获得了创build示例数据的代码,您可以在将来的问题中使用这些数据。 一般来说,您的示例数据的质量越好,您会得到更好的质量答案(如Thomas在他的评论中所build议的那样)。