如何在gnuplot中使用多行数据文件?

时间:2012-11-13 21:42:59

标签: gnuplot

我有一个包含两列的数据文件:XiYi。我想为Xi绘制(Yi-1 - Yi)/Yi-1i>1的关系。可以在GNUPlot direclty中做到吗?

2 个答案:

答案 0 :(得分:2)

是的,可以直接使用gnuplot - 这并不容易:

firstval = NaN
yi1(yi) = (returnval=firstval, firstval=yi, returnval)
plot "datafile" using 1:((yi1($2)-$2)/returnval)

您需要使用内联函数。内联函数的形式如下:

funcname(args,...) = (statement1,statement2,...,statementn, return_value)

这里我刚刚创建了一个函数来保存它传递的最后一个值。不幸的是,这个解决方案变得更难看了,因为我无法在使用规范中调用yi1两次(第二次,我会得到错误的返回值),所以我不得不引用保存返回值的变量直。它不漂亮,但它的工作原理。你可以通过传递$0(行号)来“漂亮”一点点,只有当$ 0更改时才更新,但是对于这个黑客来说可能不值得。

答案 1 :(得分:0)

直接在gnuplot中执行此操作非常棘手。问题是你必须在计算中使用第(i-1)个元素,gnuplot不能自动执行。它可以进行简单的计算,但只能在同一行上进行,例如

plot "datafile" using ($1):(($2-$1)/$2)

会很容易。

对于您要做的事情,我建议使用octave,或者您可以使用电子表格应用程序准备数据文件。

在八度音阶中,您可以将其绘制成:

d = load("datafile")
plot(d(2:end, 1), d(1:end-1, 2)-d(2:end, 2)./d(1:end-1, 2))