如何使用 gnuplot 绘制目录中的所有数据文件?

How to plot all data files in the directory with gnuplot?

如何用gnuplot绘制目录下的所有数据文件?我的意思是从每个数据文件中创建一个图形。数据文件有不同的名称。我试过了:

j=0;do for [i in system("ls")] { j=j+1; set term png; set output ''.i.'.png' ; p i u 1:2 w lines lc rgb "navy" t ''.i }

导致错误:x 范围无效

plot for [fn in system("ls")] fn with lines title ''.i

导致错误:内部错误:字符串运算符应用于未定义或非字符串变量

这将所有数据绘制在一张图中

a=system('a=`tempfile`;cat *.dat > $a;echo "$a"')
plot a u 1:2

我希望这是一个常见问题,并且有详细的答案,但是,我无法立即找到合适的示例...

编辑: 您可以使用 gnuplot 的变量 GPVAL_SYSNAME 以“平台无关”的方式执行此操作,该变量保存操作系统的名称。 此外,使用目录的用户变量 DIR 和文件扩展名的 EXT。如果输出文件应该在不同的目录中,例如可以定义 DIR_INDIR_OUT 而不是 DIR

脚本:

### plot all datafiles in a directory
reset session
set term pngcairo

DIR   = 'Test/'     # directory; use '' for current directory
EXT   = '.dat'      # file extension
FILES = GPVAL_SYSNAME[1:7] eq 'Windows' ? system(sprintf('dir /B %s*%s',DIR,EXT)) : \
                                          system(sprintf('ls     %s*%s',DIR,EXT))     # Linux/MacOS

myInput(s)  = sprintf('%s%s',DIR,s)
myOutput(s) = sprintf('%s%s.png',DIR,s[1:strlen(s)-strlen(EXT)])    # replace file extension with .png

do for [FILE in FILES] {
    set output myOutput(FILE)
    plot myInput(FILE) u 1:2 w lines lc "red" title FILE
}
set output
### end of script