Gnuplot,在 x 轴上标准化

Gnuplot, normalize over x axis

我有两个数据集引用以两种不同方式执行的同一进程。就实时而言,执行 A 比执行 B 慢,但这两个图表示相同的现象..

我可以将两者一起绘制如下:

plot 'A' using 1:2, 'B' using 1:2

但我得到了两个 X 尺度不同的图表:A 速度较慢,所以图表很多。

我可以通过执行以下操作来规范化图表:

plot 'A' using ( / maxA):2, 'B' using ( / maxB):2

这非常适合我。唯一的问题是 maxAmaxB 变量。它们很容易确定(分别为 tail -n1 A | cut -f1tail -n1 B | cut -f1),但我想知道是否有自动执行此操作的方法。

提前感谢您的回答。

更新

在我应用了Wrzlprmft的优秀答案后,我终于得到了以下模式,非常方便:

max(Source) = system('tail -n ' . Source . '| cut -f1')

A = 'path/to/A'
maxA = max(A)
plot A using ( / maxA):2

另一个可能的改进是在 max 函数中包含一个 Column 参数,这样我们也可以在 cut 中调整 -f 标志的参数。

更新

我改变了接受的想法,因为 stats 命令似乎更适合这个目的。

谢谢大家

system 命令允许您执行程序并获得它们的输出。例如,您可以在 plot 命令之前使用以下内容:

maxA = system("tail -n1 A | cut -f1")
maxB = system("tail -n1 B | cut -f1")

替代方法是在 gnuplot 中使用 stats 命令,无需任何外部程序:

stats datafA using 1:2 name "A"
stats datafB using 1:2 name "B"

plot datafA using 1:2, datafB using (/B_max_x*A_max_x)

它还会生成更多有用的数据统计信息,请使用 show var A(或 BSTATS(如果您未提供名称)检查它生成的变量).

(不同的解决方案),您在 x2y1 坐标系上绘制 B,其中 x2 轴独立自动缩放。

set xtics nomirr
set x2tics 
set xrange [*:*] noextend # make sure the scaling is coherent
set x2range [*:*] noextend # by switching off extension
set link x2 via x*factor inverse x/factor # alternative, for gp>=v5.2
plot datafA us 1:2, datafB us 1:2 axes x2y1

如果你知道你的横坐标值之间的关系,你可以直接link gp 5.2以来的两个轴