如何使用 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_IN
和 DIR_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
如何用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_IN
和 DIR_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