使用gnuplot,我如何迭代ARG1,ARG2,ARGN?

时间:2018-04-16 12:45:24

标签: gnuplot

我正在使用gnuplot脚本通过调用它来绘制一些数据:

gnuplot -p -c script.plt first.dat

script.plt看起来像这样:

set grid
set yrange [0:1000]
set xrange [-1:6]
set xtic 1 rotate 90
plot ARG1 using (column(0)):2:3:4:xtic(1) with yerrorbars

我想传递更多数据并将它们全部绘制在同一个数字上:

gnuplot -p -c script.plt first.dat second.dat

我可以通过以下方式实现:

set grid
set yrange [0:1000]
set xrange [-1:6]
set xtic 1 rotate 90
plot ARG1 using (column(0)):2:3:4:xtic(1) with yerrorbars, \
    ARG2 using (column(0)):2:3:4:xtic(1) with yerrorbars

但是如何传递任意数量的数据来绘制?

gnuplot -p -c script.plt first.dat second.dat third.dat
gnuplot -p -c script.plt first.dat second.dat third.dat fourth.dat ...

我知道可以使用绘图进行迭代,但是可以迭代ARGS吗?类似的东西:

plot for [arg in ARGS] arg using (column(0)):2:3:4:xtic(1) with yerrorbars

http://www.gnuplotting.org/tag/iteration/

1 个答案:

答案 0 :(得分:1)

Gnuplot最多只支持10个ARG变量,即ARG0, ..., ARG9(即使ARGC变量不受此限制)。作为解决方法,您可以将所有文件作为空白分隔字符串(假设您的文件名不包含空格字符)作为第一个参数传递

gnuplot -c script.plt "file1.dat file2.dat"

然后在Gnuplot中“解析”它:

plot for [i=1:words(ARG1)] word(ARG1, i) ...

编辑:

或者,可以将所有参数聚合到一个数组中(假设最新版本的Gnuplot),然后在plot语句中使用该数组:

N = (9 < ARGC)?9:ARGC
array ARGV[N]

do for [i=1:N] {
  eval sprintf("ARGV[%d] = ARG%d", i, i);
}

print "found ", |ARGV|, " arguments"

plot for [i=1:|ARGV|] ARGV[i] ...