r-为多个数据文件创建并保存相同的绘图-仅为一个文件保存图像,并且显示为没有数据的白色矩形



我准备了一个建模程序,它生成了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()
}

任何帮助都将不胜感激!

我想提供一种替代策略

  1. 输入文件路径

    filepath <- dir(path=".", pattern="csv", full.names=TRUE)

  2. 使用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)

最新更新