如何在 gnuplot 中绘制目录中的所有文件?我的意思是,当我有 15 个数据文件时,我将获得 15 个图表。
plot '???' with lines
答案1
一个解决方案只需太多注意事项(文件名中的空格、不包含数据但驻留在文件夹中的文件等)。需要您自担风险使用它。
plot for [fn in system("ls")] fn with lines title ''.i
正确的方法当然是以有序的方式命名文件并for
以更理智的方式重写,例如
plot for [i=1:15] `mydata`.i.`.dat` using 1:2 with lines title `data set `.i
请注意,for
forplot
仅在较新版本的gnuplot
.
编辑:根据评论和聊天中的请求,这是使用的最终形式。再次强调,这又快又脏,使用它的风险由您自己承担。
j=0
do for [fn in system("ls")] {
j=j+1; set term png
set output ''.fn.'.png'
plot fn with lines linecolor rgb "navy" title ''.i
}
答案2
Weijun Zhou 已经向您展示了一个可行但稍微不稳定的解决方案。如果您有大量数据文件,手动重命名它们以遵循公式不太现实,您可以检查文件格式(.txt、.dat,无论您的数据保存为什么)以过滤掉不需要的文件。
示例:绘制文件夹中的所有 .txt 文件并将它们保存为 .png 以供将来分析。
do for [fn in system("ls")] {
len=strlen(fn)
form=substr(fn,len-3,len)
if (form eq ".txt") {
set term png
data=sprintf("%s",fn)
filename=sprintf("%s.png",substr(fn,0,len-4))
set output filename
plot data using 1:2 title "Data"
unset output
}
}
这将遍历每个文件,检查它是否是 .txt 文件,如果是,则将其绘制并保存为与原始 .txt 文件同名的 .png。这样,只要同一文件夹中没有任何多余的 .txt 文件,您就可以避免因程序尝试读取不正确的文件格式而可能导致的任何问题。
附带说明一下,如果有人查看此线程想要在 Windows 版本的 Gnuplot 上运行此线程,由于系统命令不同,您需要对第一行进行更改:
system("ls") => system("dir /b")