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内で可能ですか?あれば、どうですか?
おかげで、 トム
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内で可能ですか?あれば、どうですか?
おかげで、 トム
は、このタスクは、しかし、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のスクリプトは、ファイルを読み取り、それが空行(フィールドのゼロ数)に達するまでアレイx
とy
に第一及び第二のカラムを保存します。その後、空でない行(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
に変換されます