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

时间:2013-11-19 10:58:50

标签: gnuplot

我有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

3 个答案:

答案 0 :(得分:15)

您无法在单个using语句中合并来自两个不同文件的数据。您必须将这两个文件与外部工具结合使用。

最简单的方法是使用paste

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

对于独立于平台的解决方案,您可以使用例如以下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: plotting the maximum of two files

答案 1 :(得分:3)

简短的回答是......你做不到。 Gnuplot一次处理一个文件。

解决方法是使用外部工具,例如:如果您有类似unix或gnuplot的话,请使用shell。

如果两个文件中的第一列相同,

join file1 file2 > merged_file将允许您非常轻松地合并文件。选项允许连接其他列并管理任一文件中缺少的数据。

如果没有公共列但是行号相关,paste就行了。

答案 2 :(得分:0)

如果两个数据集不适合(x中的不同采样),有一个技巧,但你至少有一个数学模型很好:

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

plot $corr using 1:2

如果两个数据集都具有相同的自变量集,这当然是无稽之谈,因为您可以简单地将它们组合起来(参见其他答案)。