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
这非常适合我。唯一的问题是 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 ( / 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
(或 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
如果你知道你的横坐标值之间的关系,你可以直接link gp 5.2以来的两个轴
我有两个数据集引用以两种不同方式执行的同一进程。就实时而言,执行 A
比执行 B
慢,但这两个图表示相同的现象..
我可以将两者一起绘制如下:
plot 'A' using 1:2, 'B' using 1:2
但我得到了两个 X 尺度不同的图表:A
速度较慢,所以图表很多。
我可以通过执行以下操作来规范化图表:
plot 'A' using ( / maxA):2, 'B' using ( / 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 ( / 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
(或 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
如果你知道你的横坐标值之间的关系,你可以直接link gp 5.2以来的两个轴