6

使用 gnuplot 4.2,是否可以获取特定列/行的值并以某种方式使用该值?

例如,假设我的数据文件包含以下内容

#1  2
7  13
5  11
23 17
53 12

对于一个简单的图,其中第 1 列是 x 轴,第 2 列是 y 轴,我会:-

plot 'datafile' using 1:2

我要做的是通过该列中的第一个元素 (13) 对第 2 列中的所有数据进行规范化。有没有办法在 gnuplot 本身中做到这一点(即,不求助于脚本语言或其他东西来首先预处理数据)?

干杯

4

4 回答 4

7

使用运行平均值演示,我设法实现了一个标准化为第二列的第一个值的图。

base变量用于存储参考值,函数在第一行first初始化base

first(x) = ($0 > 0 ? base : base = x)
plot file.dat u 1:(first($2), base/$2)

应该提到的是,这不是使用 gnuplot 4.2 完成的。

编辑:使用 Christoph 的建议进行了更新。

于 2015-02-06T07:55:52.963 回答
1

如果您的基值(例如 13)在数据集的第一行,您应该能够使用 CVS 版本的 gnuplot 做您想做的事情。

看看运行平均值演示。沿着这些思路,您可以编写一个自定义函数,在第一次调用时将基值存储在自定义变量中,并在后续调用时返回该变量。

(由于该演示仅针对 CVS 版本列出,我假设所需的功能在当前版本中不可用。)

于 2009-09-20T09:35:59.870 回答
1

您可以使用stats命令获取第二列的第一个值并将其存储在reference变量中,如下所示,

stats 'datafile' using (reference=$2) every ::0::0 nooutput

您可以替换$2为您想要的任何其他列。中的零every ::0::0表示该列的第一个条目,您也可以使用它every ::n::n来获取该列的第 n 个条目。nooutput用于避免混乱的控制台。

然后,您可以使用以下方法获得归一化图,

plot 'datafile' using 1:($2/reference)
于 2022-02-22T08:38:03.690 回答
-1

广告一个充满 13 的新列,然后使用:

使用 1:($2/$3) 绘制“数据文件”

于 2009-01-20T09:00:07.390 回答