Gnuplot:数据规范化

Gnuplot:数据规范化,plot,gnuplot,normalization,Plot,Gnuplot,Normalization,我有几个基于时间的数据集,它们的规模非常不同,例如。g [set 1] 2010-01-01 10 2010-02-01 12 2010-03-01 13 2010-04-01 19 … [set 2] 2010-01-01 920 2010-02-01 997 2010-03-01 1010 2010-04-01 1043 … 我想画出自2010年1月1日以来这两个国家的相对增长。要将两条曲线放在同一个图形上,我必须对它们进行规格化。因此,我基本上需要选取第一个Y值并将其用

我有几个基于时间的数据集,它们的规模非常不同,例如。g

[set 1]
2010-01-01  10
2010-02-01  12
2010-03-01  13
2010-04-01  19
…

[set 2]
2010-01-01  920
2010-02-01  997
2010-03-01  1010
2010-04-01  1043
…
我想画出自2010年1月1日以来这两个国家的相对增长。要将两条曲线放在同一个图形上,我必须对它们进行规格化。因此,我基本上需要选取第一个Y值并将其用作权重:

plot "./set1" using 1:($2/10), "./set2" using 1:($2/920)
但我想自动完成,而不是硬编码10和920作为除法器。我甚至不需要第二列的最大值,我只想选择第一个值,或者更好的,一个给定日期的值

所以我的问题是:有没有一种方法可以参数化给定列的值,它对应于给定X列的给定值(X是时间轴)?差不多

plot "./set1" using 1:($2/$2($1="2010-01-01")), "./set2" using 1:($2/$2($1="2010-01-01"))

其中$2($1=“2010-01-01”)是我正在寻找的功能。

选择第一个值非常容易。只需记住其值并将所有数据值除以:

ref = 0
plot "./set1" using 1:(ref = ($0 == 0 ? $2 : ref), $2/ref),\
     "./set2" using 1:(ref = ($0 == 0 ? $2 : ref), $2/ref)
在给定日期使用该值更为复杂:

使用外部工具(awk)

使用gnuplot

您可以使用gnuplot的
stats
命令来选择所需的值,但您必须注意,只有在这之后才能进行所有时间设置:

a) 字符串比较

stats "./set1" using (strcol(1) eq "2010-01-01" ? $2 : 1/0)
ref1 = STATS_max
...
set timefmt ...
set xdata time 
...
plot ...
b) 比较实际时间值(仅在5.0版之后才能这样工作):

stats "./set1" using (strcol(1) eq "2010-01-01" ? $2 : 1/0)
ref1 = STATS_max
...
set timefmt ...
set xdata time 
...
plot ...
reftime = strptime("%Y-%m-%d", "2010-01-01")
stats "./set1" using (timecolumn(1, "%Y-%m-%d") == reftime ? $2 : 1/0)
ref1 = STATS_max
...
set timefmt ...
set xdata time 
...
plot ...