我对R很陌生,遇到了一个我根据自己的知识/书籍/互联网无法解决的问题。
所以这就是问题所在:
我有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()
}
正如您所看到的,我尝试了一下并使用了以前任务中的代码片段。不幸的是,他们在合并时不会工作。
总结:
答案 0 :(得分:2)
我会将所有数据读入一个大数据框架并使用构面来制作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)
答案 1 :(得分: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()
}