2016-10-18 4 views
0

2つのブロック(1つの空白行で区切った)からなるデータファイルを持っていて、ブロック1とブロック2のデータの差をプロットしたいとします。Gnuplot:異なるブロックのデータを使った操作

plot 'a.dat' using 1:($2_1-$2_2) 

ここで、$2_1は、ブロック2 col.2からのデータ「ブロック1のcol.2のデータ」および$2_2のデータを意味するものとします。それはGnuplot内で可能ですか?あれば、どうですか?

おかげで、 トム

答えて

0

は、このタスクは、しかし、gnuplotの中に直接、可能な限り最もありそうでない、一つは前処理は、データファイルまず、使用して、例えば、gawkは、その後、変更したファイルをプロットすることができます。例えば:

dataFile="a.dat" 
plotCmd(fname)=sprintf("<gawk '\ 
    BEGIN{mode=0;l=0;} \ 
    mode==0{if(NF==0){mode=1;}else{x[NR]=$1;y[NR]=$2;}} \ 
    mode==1{if(NF>0){mode=2;l=NR;}} \ 
    mode==2{print $1,y[NR-l+1],$2}' %s", fname) 

plot plotCmd(dataFile) u 1:($2-$3) w l 

gawkのスクリプトは、ファイルを読み取り、それが空行(フィールドのゼロ数)に達するまでアレイxyに第一及び第二のカラムを保存します。その後、空でない行(NF>0)に達するまで、連続する空白行をすべてスキップします。これは、入力ファイル内の行の位置を記憶し、その後一緒にx座標を第二のブロックの各行のために出力する第1のブロック、すなわち、データファイルからy座標対応など

1 2 
2 4 
3 6 



1 4 
2 8 
3 12 

...これは両方のブロックのx座標が一致していることを前提とし

1 2 4 
2 4 8 
3 6 12 

に変換されます

関連する問題