Gnuplot,在x轴上标准化

时间:2015-06-10 12:29:46

标签: 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

哪个适合我。唯一的问题是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 ($1 / maxA):2

另一个可能的改进可能是Column函数包含max参数,以便我们也可以调整-fcut标志的参数。

更新

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

谢谢大家。

2 个答案:

答案 0 :(得分:7)

替代方法是在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(或BSTATS检查其生成的变量)。

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

答案 1 :(得分:2)

system命令允许您执行程序并获取其输出。例如,您可以在plot命令之前使用以下命令:

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