我有两个数据集,指的是以两种不同的方式执行的相同过程。相对于实时,执行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 -n1 A | cut -f1
和tail -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
参数,以便我们也可以调整-f
中cut
标志的参数。
改变了我对接受的看法,因为stats
命令似乎更适合这个目的。
谢谢大家。
答案 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
(或B
或STATS
检查其生成的变量)。
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")