如何对gnuplot中的行进行数学运算

时间:2013-12-16 19:08:31

标签: gnuplot

比方说,我的数据文件有两列,五行如下,

1   3
2   5
3   3
4   4
5   2

现在我想绘制它们,但在第二列上进行一些数学运算。例如,

plot 'test.dat' u 1:($2*)

我的星号是什么意思我想在第二列值上使用sqrt(row2 ^ 2 + row1 ^ 2),即sqrt(5 ^ 2 + 3 ^ 2)。我怎么能这样做?非常感谢!

1 个答案:

答案 0 :(得分:1)

通常,只能访问当前行的所有列的值。可以访问前一行的值,但很棘手。基本上,您必须将值保存在临时变量中。

以下列方式运作:

  1. 在第一行中,保存两列的值,不要绘制它们(使用NaN作为值)。

  2. 在第二行中,保存当前的x值,使用前一行的x值。然后保存当前的y值,并根据前一行(prevY)和当前行(currY)计算您的值。

  3. 这不会绘制最后一行。但无论如何,这还不是下一行。如果你想要它也绘制最后一行,例如0作为附加值,您必须使用0 0添加最后一行。

    在脚本中,我使用set macros来提高代码的可读性:

    set macros
    prevX = currX = prevY = currY = 0
    UsePreviousXvalue = '(($0 == 0) ? (prevX = NaN, currX = $1) : (prevX = currX, currX = $1)), prevX'
    AssignYvalue = '(prevY = currY, currY = $2)'
    plot 'test.dat' using (@UsePreviousXvalue):(@AssignYvalue, sqrt(prevY**2 + currY**2))