我有一个包含两列的数据文件:Xi
和Yi
. 我想绘制Xi
与(Yi-1 - Yi)/Yi-1
for 的对比图i>1
。是否可以在 GNUPlot 直接中做到这一点?
问问题
356 次
2 回答
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
在 using 规范中调用两次(第二次,我会得到错误的返回值),所以我不得不直接引用保存返回值的变量。它不漂亮,但它有效。您可以通过传递(行号)并仅在 $0 更改时才更新它可能会“漂亮”一点$0
,但是对于这个 hack 可能不值得。
于 2012-11-13T22:58:20.853 回答
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))
于 2012-11-13T22:28:50.110 回答