0

次のようなcsvファイルをプロットしようとしています:

a 531049
b 122198
c 3411487
d 72420
e 1641
f 2181578
. .
. .
. .

ただし、これらの値は、同じ形式の別の csv ファイルを使用してスケーリングする必要があります。つまり、他のファイル
a 45
b 12...

531049/45 などをプロットしたい。最初の列は x 軸、2 番目の列は y 軸になります

2つのファイルをマージせずにこれを行うにはどうすればよいですか?

4

1 に答える 1

1

Gnuplot の使用は、単一のファイル/ストリームからデータを読み取ることを意図しているため、2 つのファイルを何らかの方法でマージする必要があります。これは、ほぼすべてのツールの頼りになるツールであるため、これを使用pythonします。2 つのファイルから読み取り、データを標準出力に書き込むスクリプトを作成します。何かのようなもの:

#merge.py
import sys
file1,scale_factor_file = sys.argv[1:]

#Read the scale factors into a dictionary
d = {}
with open(scale_factor_file) as sf:
    for line in sf:
        key,scale_factor = line.split()
        d[key] = float(scale_factor)

#Now open the other file, scaling as we go:
with open(file1) as fin:
    for line in fin:
        key,value = line.split()
        print key,float(value)/d.get(key,1.0)

gnuplot のパイプから読み取る機能を使用して、データをプロットできます。

plot '< python merge.py datafile file_with_scale_factors' using 2
于 2013-03-26T15:50:40.790 に答える