我有一个包含两列的数据文件:Xi
和Yi
。我想为Xi
绘制(Yi-1 - Yi)/Yi-1
与i>1
的关系。可以在GNUPlot direclty中做到吗?
答案 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))