2017-12-11 44 views
0

gnuplotに問題があります。私は、51の列を持つ2つのデータファイル(file1とfile2)を合わせる必要があります。このようなループでやります。gnuplotループ内でプロットをフィットして書き直します

do for [j=2:51] { 
       fxj(x) = Dxj*x+ qxj 
       fit [xmin:xmax] fxj(x) '< paste file1 file2' u 1:(((column(j))+(column(j+51)))/2) via Dxj, qxj 
       print j, ' ', Dxj/2 
       } 

すごく素敵です。私が今必要とするのは、生データとフィットを重複させるために、ループ内に定義されたすべてのfxjをプロットすることです。 このように試しました

do for [j=2:51] { 
       fxj(x) = Dxj*x+ qxj 
       fit [xmin:xmax] fxj(x) '< paste file1 file2' u 1:(((column(j))+(column(j+51)))/2) via Dxj, qxj 
       print j, ' ', Dxj/2 
       plot '< paste file1 file2' u 1:(((column(j))+(column(j+51)))/2) t'', fxj(x) t'' 
       } 

しかし、動作しません。 それを機能させるための提案はありますか?

+0

はSOへようこそ。質問にあなたのコードを使っていないものを正確に追加できますか?これにより、あなたの質問を見つけて回答するのがずっと簡単になります。 – m00am

+0

https://stackoverflow.com/a/46959036/2604213 – Christoph

答えて

1

以下の簡略化された例のように、1つのアプローチはmultiplotということができます。この考え方は、プロットマージンを修正して、マルチプロット環境内の連続する各プロットが同じ「領域」上にプロットするようにすることです。また、ループ内で、スクリプトはこれが生み出す

set multiplot 

set lmargin at screen 0.1 
set rmargin at screen 0.9 
set bmargin at screen 0.1 
set tmargin at screen 0.9 

set xr [-2:2] 
set yr [-4:4] 

do for [j=1:3]{ 

    if(j>1){ 
     unset xtics; 
     unset ytics; 
     unset border; 
     unset xlabel; 
     unset ylabel; 
    } 

    set key at screen 0.3,0.9 - j*0.05 reverse 
    plot j*x w l t sprintf('plot %d', j); 
} 

...彼らは数回描かれていないように、すべてのプロットが、最初の1のために、それはなどチックの設定を解除することを確認します: enter image description here

また、あなたはまず、doループを実行し、アレイ内の係数を組み立てた後、一度にすべてをプロットできます。

set xr [-2:2] 
set yr [-4:4] 

array coeffs_a[3] 
array coeffs_b[3] 

do for [j=1:3]{ 

    #save the fitted coefficients 
    coeffs_a[j] = j 
    coeffs_b[j] = j 

} 

plot for [j=1:3] coeffs_a[j]*x + coeffs_b[j] w l t sprintf('plot %d', j) 
+0

お気に入り:3つの同じ紫色の線の伝説。 – mikuszefski

+0

@mikuszefskiああ、確かに、どのような恥です! :)まあ、私はちょうど重複プロットのシナリオで凡例を配置する方法を示したいと思った... – ewcz

関連する問題