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