这个问题(
如何在Gnuplot中将数据文件中的一个数字存入变量)的第一个答案对我有所帮助。
在我的情况下,我有一个包含抛物线参数的文件。我已经将这些参数保存在Gnuplot变量中。然后,我为每个时间步骤绘制包含参数变量的函数。
#!/usr/bin/gnuplot
datafile = "parabola.txt"
set terminal pngcairo size 1000,500
set xrange [-100:100]
set yrange [-100:100]
titletext(timepar, apar, cpar) = sprintf("In timestep %d we have parameter a = %f, parameter c = %f", timepar, apar, cpar)
do for [step=1:400] {
set output sprintf("parabola%04d.png", step)
a=system("awk '{ if (NR == " . step . "+1) printf \"%f\", $1}' " . datafile)
c=system("awk '{ if (NR == " . step . "+1) printf \"%f\", $2}' " . datafile)
a=a+0.
c=c+0.
set title titletext(step, a, c)
plot c+a*x**2
}
这将生成一系列名为parabola0001.png、parabola0002.png、parabola0003.png等的png文件,每个文件都显示从名为parabola.txt的文件中读取的参数的抛物线。标题包含给定时间步长的参数。
要理解gnuplot system()函数,您需要知道:
双引号内的内容不会被gnuplot解析;
点用于在gnuplot中连接字符串;
awk printf命令的双引号必须转义,以隐藏它们不被gnuplot解析器解析。
要测试此gnuplot脚本,请将其保存到任意名称的文件中,例如parabolaplot.gplot,并使其可执行(chmad a+x parabolaplot.gplot)。可以使用以下命令创建parabola.txt文件:
gnuplot
时,我总是从Perl
内部调用它。如果由于某种原因这不是一个选项,我建议从gnuplot
脚本内部调用awk
。请参见此处和此处以了解如何实现此操作。 - Steve