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

从gnuplot中的2个文件获取比率,gnuplot,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值之间的比率。e、 g.,25/65,56/89,75/102和67/167 我是怎么做到的?我只知道画一个这样的图,而不是用比例 plot "a.dat" using 1:2 with linespoints n

我有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值之间的比率。e、 g.,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

不能使用语句将两个不同文件中的数据合并到一个
。必须使用外部工具组合这两个文件

最简单的方法是使用
粘贴

plot '< paste a.dat b.dat' using 1:($2/$4) with linespoints
使用1:($2/$4)和线条点打印“
对于独立于平台的解决方案,您可以使用以下python脚本,在本例中也是如此:

“”“paste.py:合并两个文件的行。”“”
导入系统
如果(len(sys.argv)<3):
raise RUNTIMERROR('需要两个文件')
打开时(sys.argv[1])为f1:
打开(sys.argv[2])作为f2:
对于拉链中的线(f1、f2):
打印行[0]。条带()+“”+行[1],
然后打电话

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

(另请参见)

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

解决方法是使用外部工具,例如,如果您有类unix或gnuplot,则使用shell

join file1 file2>merged_file
如果两个文件中的第一列相同,则可以非常轻松地合并文件。选项允许连接其他列并管理任一文件中丢失的数据


如果没有公共列,但行号相关,
粘贴
就可以了。

如果两个数据集不匹配(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

如果两个数据集有相同的自变量集,这当然是胡说八道,因为你可以简单地将它们组合起来(参见其他答案)。

我和下一个家伙一样喜欢numpy,但我认为它在这里的使用有点过度。通过
zip
ing 2个文件对象,您可以用“香草”python完成同样的任务。@mgilson您是对的,我用“香草”python添加了一个可能的
paste.py
实现。请随意更正它!它还有一个优点,即它比
numpy
实现灵活得多,因为它在合并文件之前不解析文件。对于可移植的解决方案+1。由于python和,可以将
语句相结合,因此您可以将open(sys.argv[1])作为f1,open(sys.argv[2])作为f2:
并降低嵌套级别。在重复这个问题之后,我发布了另一个答案。我想指出
join
命令很有意思,它不是那么容易移植,但是允许合并列值上的文件。FWIW,如果您想要或需要一个只支持gnuplot的解决方案,您可能需要签出它