我有很多(超过100个)具有相同表结构的csv文件,例如在所有表头中都在第4行,它们都有6列,数据来自第5行到400001,
我需要在散点图中绘制这些数据,其中x显示第一列(40001时间单位),其他列是不同变量的Y,[如果我能够格式化绘图(颜色,范围,标题,传说,...)]并自动输入这些csv文件并导出png或pdf或其他任何可能有用的东西,我有Excel和R但我不知道如何以有效的方式进行这种绘图。 (命名也很重要,它们应具有CSV文件的名称)
有关如何以较少的努力完成此任务的任何想法?
由于
答案 0 :(得分:2)
你的问题对具体细节有点了解,所以我将做一些假设,开始研究答案的骨架。
让我们制作一些虚假的CSV文件,例如数据
将工作目录设置为包含数据的文件夹...
setwd("C:/my-csv-files")
制作100个数据帧,每行6行500行(为了保持快速)......
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
是您的时间变量,X2
到X5
是您的CSV文件中的其他变量
require(reshape2)
dat <- melt(mydata, id.vars = c("X1"), measure.vars = c("X2", "X3", "X4", "X5"))
这里是你的时间变量的单个散点图,其他变量(颜色编码)。目前还不清楚你的问题究竟是什么样的情节,所以请问更多细节的另一个问题。
require(ggplot2)
ggplot(dat, aes(X1, value)) +
geom_point(aes(colour = factor(variable)))
现在,将其另存为PDF或PNG ,请参阅?ggsave
了解众多选项...
ggsave(file="myplot.pdf")
ggsave(file="myplot.png")
找到这些文件的位置
getwd()
为每个CSV文件制作一个图,这是一个方法
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 。
所以这涵盖了你问题的主要部分:
作为奖励,您可以获得用于创建示例数据的代码,您可以在将来的问题中使用这些代码。一般来说,示例数据的质量越好,您获得的质量答案就越好(正如Thomas在评论中所说的那样)。