从gnuplot中的2个文件中获取比例

我有2个dat文件:

a.dat #Xs 100 25 200 56 300 75 400 67 b.dat #Xs 100 65 200 89 300 102 400 167 

我想在gnuplot中绘制一个图,其中yy值分别是a.dat和b.dat的值之间的比率。 例如25 / 65,56 / 89,75 / 102和67/167。

我如何做到这一点? 我只知道这样做的情节,而不是比例。

 plot "a.dat" using 1:2 with linespoints notitle "b.dat" using 1:2 with linespoints notitle 

您不能在一个using语句中合并来自两个不同文件的数据。 您必须将这两个文件与外部工具组合在一起。

最简单的方法是使用paste

 plot '< paste a.dat b.dat' using 1:($2/$4) with linespoints 

对于一个独立于平台的解决scheme,你可以使用例如下面的python脚本,在这种情况下也是这样:

 """paste.py: merge lines of two files.""" import sys if (len(sys.argv) < 3): raise RuntimeError('Need two files') with open(sys.argv[1]) as f1: with open(sys.argv[2]) as f2: for line in zip(f1, f2): print line[0].strip()+' '+line[1], 

然后打电话

 plot '< python paste.py a.dat b.dat' using 1:($2/$4) w lp 

(另见Gnuplot:绘制两个文件的最大值 )

简短的回答是,你不能。 Gnuplot一次处理一个文件。

解决方法是使用外部工具,例如使用shell,如果你有一个unix或gnuplot。

join file1 file2 > merged_file将允许您很容易地合并文件,如果第一列在两个文件中是相同的。 选项允许join其他列并pipe理两个文件中缺less的数据。

如果没有共同的列,但是行号是相关的, paste将会执行。

如果两个数据集不适合(在x中有不同的采样),那么就有一个技巧,但是至less有一个math模型是适合的:

 fit f2(x) data2 us 1:2 via ... set table $corr plot data1 using 2:(f2($1)) unset table plot $corr using 1:2 

这当然是无稽之谈,如果两个数据集具有相同的一组自variables,因为您可以简单地组合它们(请参阅其他答案)。