3

A と B の 2 つのファイルがあります。どちらのファイルにも x と y の 2 つの列が含まれています。

ここで、x 対 (yA - yB) のグラフをプロットします。gnuplot は同じコマンドを提供していますか?

もう1つ、xAとxBが同じではないとしましょう。x軸にxAとxBの両方にあるすべての要素が含まれ、y軸が対応するyコンポーネントの違いであるグラフをプロットするにはどうすればよいですか?

4

2 に答える 2

8

まず、joinbashでファイルを前処理します。

join <(sort -k1,1 file1) <(sort -k1,1 file2) > file3

ファイルの並べ替えは不可欠です。そうしないjoinと機能しません。

次に、結果を使用してグラフを描画できます。

plot '< sort -n file3' using 1:($2-$3) with lines

繰り返しになりますが、ここでは数値による並べ替えが必要ですjoin。これは、行が互いに交差する英数字による並べ替えを使用しているためです。

于 2012-05-22T08:58:40.887 に答える
2

これはにとって良い仕事かもしれないと思いますpaste

plot "<paste A B" u 1:($2-$4) w points #whatever line style you want...
                  #xA #yA-yB

xA!= xBのファイルの場合、両方に共通する点のセットのみをプロットするか(2つのセットの交点)、すべての点をプロットするか(和集合)は少しわかりません。セットの)。結合は簡単です:

plot "<paste A B" u 1:($2-$4) w points ls 1,\
     "<paste A B" u 3:($2-$4) w points ls 1

UNIXコマンドラインツールのみを使用すると、交差は困難になります(特に、入力の順序を保持したい場合)

Pythonを使用していますが、それほど悪くはありません...

#joinfiles.py
import sys
f1=sys.argv[1]
f2=sys.argv[2]
xA,yA=zip(*[map(float,line.split()) for line in f1.readlines()])
xB,yB=zip(*[map(float,line.split()) for line in f2.readlines()])
f1.close()
f2.close()
for i,x in enumerate(xA):
    if(x in xB):
        sys.stdout.write('%f %f %f\n'%(x,yA[i],yB[i]))

そしてgnuplotから:

plot "<python joinfiles.py A B" u 1:($2-$3) #...
于 2012-05-22T12:25:24.470 に答える