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

如何在gnuplot中对行进行数学运算,gnuplot,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   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)。我怎么能做到?非常感谢

通常,只能访问当前行所有列的值。访问前一行的值是可能的,但需要技巧。基本上,必须将值保存在临时变量中

其工作原理如下:

  • 在第一行中,保存两列的值,不要打印它们(使用
    NaN
    作为值)

  • 在第二行中,保存当前x值,使用上一行的x值。然后保存当前y值,并基于上一行(
    prevY
    )和当前行(
    currY
    )计算您的值

  • 这并没有画出最后一行。但那也不是下一排了。如果要将最后一行(例如,
    0
    作为附加值)也打印出来,则必须添加最后一行(例如,
    0

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

    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))
    

    嗯?你到底期望得到什么样的结果图?只是这一行和前一行的总和,或者是不同的东西?Y_old=0;使用1:(temp=$2-y_old,y_old=$2,temp)绘制'datafilename',我也得到了上面的建议,但不起作用。张贴在这里,以防你可以纠正它。谢谢你自己的回答@christophy,这对我也很有用(注意,你必须有
    y\u old=0
    ,带小y!)。但它使用的是当前值的x值,而不是旧值的x值。再次感谢@Christoph