我准备了一个建模程序,它生成了26个单独的文件,我需要用R中的相同方式绘制这些文件的轮廓-我计划重复运行这个程序,因此我一直试图创建一个循环,为每次运行创建并保存所有26个文件的图。
我试图用它们的原始文件名保存文件(现在已经放了一个占位符名称(,因此我创建了对象"名称"并将每个文件保存到png或jpeg文件中。目前,循环只保存了1个文件(尽管使用list.files读取了4组数据(,并且它显示为一个具有正确尺寸的白色正方形,而不是由"makeplot"生成的图形(已在单个文件上进行了测试(。
我的数据示例:
Z X T
0 0 0
0 0.005 0
0 0.01 0
0 0.015 0
(84k行依此类推(
我的代码:
filenames <- list.files(path=".",
pattern="csv",
full.names=TRUE)
names <- as.vector(filenames)
# Creating a directory to save contour plots
dir.create("Contour plots")
#Creates a contour plot in ggplot of the variable in xz space
makeplot <- function(filename) {
data <- as.data.frame(read.csv(file = filename), header = FALSE)
ggplot(data=data, mapping = aes(x = data[,2],
y=data[,1],
z = data[,3])) +
geom_raster(data=data, aes(fill=data[,3]), show.legend=TRUE, interpolate
= FALSE) +
scale_fill_gradient(limits=range(data[,3]), high = 'red', low =
'white')+
geom_contour(bins = 30, colour = "black") +
xlab(label = "Distance from ridge axis") +
ylab(label = "Depth") +
theme_classic()+
coord_cartesian(
ylim = c(0,1), xlim = c(0,2))+
scale_x_continuous(expand = c(0, 0)) +
scale_y_continuous(expand = c(0, 0)) +
guides(fill=guide_legend(title="Yb concentration")) +
theme(legend.position="bottom")
}
for (f in filenames) {
png(filename="Rplot%03d.png", height = 600, width = 1200)
makeplot(f)
dev.off()
}
任何帮助都将不胜感激!
我想提供一种替代策略
-
输入文件路径
filepath <- dir(path=".", pattern="csv", full.names=TRUE)
-
使用regex编辑文件名。例如,替换".csv"扩展名和/或喜欢字符串文字和插值(参见
library(glue)
(。在现实生活中的大多数时候,我不想把上面full.names
选项产生的整个路径发扬光大。
OUTPATH <- "whatever/Rplot"
filenames <- paste0(OUTPATH, gsub("\.csv$", ".png", filepath))
编辑您的makeplot()
签名,如下所示:
makeplot <- function(filepath, filenames) {
然后转到更惯用的Map()
,对两个列表进行迭代注意:请随时从purrr
中查看map2
,作为Map()
的替代方案
Map(function(x, y) makeplot(filepath = x, filenames = y),
x = filepath,
y = filenames)