从gnuplot中的2个文件获取比率
我有2个dat文件:从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
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的解决方案,您可能需要签出它