如何在gnuplot中的同一数据文件中绘制当前记录与两个不同列的先前记录之间的差异

Sou*_*jit 2 gnuplot rows multiple-columns difference

我在文本文件中有3列数据.第一栏是时间.第二列和第三列是我的可变参数.我的目的是绘制第3列数据的当前值与第2列的先前数据值与第1列当前值的差值.

Chr*_*oph 6

这有点棘手,因为gnuplot通常只能访问当前行的值.但是,您可以在内存中保留有限数量的先前值,并在using语句中使用一些技巧.

不幸的是你没有提供任何示例数据,所以这里是我的测试数据文件test.dat(没有时间,你需要自己调整):

0 1 5
1 12 7
2 1 6
3 5 5
Run Code Online (Sandbox Code Playgroud)

以下脚本绘制了第3列中的当前值与第2列中的上一个值之间的差异:

back2 = back1 = 0
shift(x) = (back2 = back1, back1 = x)
plot 'test.dat' using 0:(shift($2), $0 < 1 ? 1/0 : $3 - back2) w lp pt 7 ps 2
Run Code Online (Sandbox Code Playgroud)

这里发生的事情基本上如下:

using语句中,您可以使用逗号分隔多个语句,例如赋值.仅将一列中的最后一个表达式用作实际数据值.

shift第二列的函数首先将前一行的值分配给变量back2,然后将当前值分配给变量back1.因此,调用shift($2)将前一行的第2列中的值保存为变量back2.然后你可以做实际的计算$3 - back2.该条件$0 < 1会丢弃您没有先前值的第一行.

结果是:

在此输入图像描述