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

xeo*_*eon 11 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
Run Code Online (Sandbox Code Playgroud)

我想在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
Run Code Online (Sandbox Code Playgroud)

Chr*_*oph 16

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

最简单的方法是使用paste:

plot '< paste a.dat b.dat' using 1:($2/$4) with linespoints
Run Code Online (Sandbox Code Playgroud)

对于独立于平台的解决方案,您可以使用例如以下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],
Run Code Online (Sandbox Code Playgroud)

然后打电话

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

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


Joc*_*oce 5

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

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

join file1 file2 > merged_file如果两个文件中的第一列相同,则将允许您轻松合并文件。选项允许加入其他列并管理任一文件中丢失的数据。

如果没有公共列但行号相关,paste则可以。

如果需要插值,因为两个文件中的网格不同,您必须对此进行编码。我有一个作为免费开源软件分发的命令行实用程序,可以提供帮助:datamerge