Gnuplot,在x轴上进行规格化

Gnuplot,在x轴上进行规格化,gnuplot,Gnuplot,我有两个数据集,它们以两种不同的方式引用同一个进程。就实时性而言,执行A比执行B慢,但这两个图形表示相同的现象 我可以按如下方式将两者结合起来: plot 'A' using 1:2, 'B' using 1:2 但是我得到了两个不同X标度的图:A比较慢,所以这个图要慢得多 我可以通过执行以下操作来规范化图形: plot 'A' using ($1 / maxA):2, 'B' using ($1 / maxB):2 这对我很合适。唯一的问题是maxA和maxB变量。它们很容易确定(分别是t

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

我可以按如下方式将两者结合起来:

plot 'A' using 1:2, 'B' using 1:2
但是我得到了两个不同X标度的图:
A
比较慢,所以这个图要慢得多

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

plot 'A' using ($1 / maxA):2, 'B' using ($1 / maxB):2
这对我很合适。唯一的问题是
maxA
maxB
变量。它们很容易确定(分别是
tail-n1a | cut-f1
tail-n1b | cut-f1
),但我想知道是否有一种自动化的方法可以做到这一点

提前感谢您的友好回答

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

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

A = 'path/to/A'
maxA = max(A)
plot A using ($1 / maxA):2
另一个可能的改进是在
max
函数中加入
参数,这样我们也可以在
cut
中调整
-f
标志的参数

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


谢谢大家。

系统命令允许您执行程序并获得其输出。例如,在执行
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 ($1/B_max_x*A_max_x)
它还会生成更多有用的数据统计信息,请使用
show var a
(或
B
,或
STATS
检查它生成的变量(如果您没有提供名称)

(不同的解决方案),在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

如果您知道横坐标值之间的关系,您可以直接链接两个轴,因为gp 5.2

对不起,我必须切换接受,因为
stats
方法更像gnuplot。但是非常感谢,你的方式也很好。