这个问题(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)
# read parameters from file, where the first line is the header, thus the +1
a=system("awk '{ if (NR == " . step . "+1) printf \"%f\", $1}' " . datafile)
c=system("awk '{ if (NR == " . step . "+1) printf \"%f\", $2}' " . datafile)
# convert parameters to numeric format
a=a+0.
c=c+0.
set title titletext(step, a, c)
plot c+a*x**2
}
这给出了一系列名为 parabola0001.png、parabola0002.png、parabola0003.png、...的 png 文件,每个文件都显示一个抛物线,其中包含从名为 .png 的文件中读取的参数parabola.txt
。标题包含给定时间步的参数。
要了解 gnuplotsystem()
函数,您必须知道:
- gnuplot 不解析双引号内的内容
- 点用于连接 gnuplot 中的字符串
- 必须对 awk
printf
命令的双引号进行转义,以将它们隐藏在 gnuplot 解析器中
要测试这个 gnuplot 脚本,请将其保存到具有任意名称的文件中,例如parabolaplot.gplot
并使其可执行 ( chmad a+x parabolaplot.gplot
)。该parabola.txt
文件可以创建
awk 'BEGIN {for (i=1; i<=1000; i++) printf "%f\t%f\n", i/200, i/100}' > parabola.txt