2017-07-30 9 views
1

私は、異なる桁の列を含むデータファイルを持っています。私は、同じキャンバスに集合的に同様の大きさのすべての列をプロットしたいと思います。私はstatsコマンドを使って各列の最大値をテストします。Gnuplot:プロットキャンバスを切り替える

私はこれまで

set key autotitle columnheader 
set terminal pdfcairo 
set out 'test.pdf' 

do for [col=5:125] { 
    stats 'datafile' using col nooutput 
    if(STATS_max < 1e-7) { 
    #draw to canvas 1 
    plot 'datafile' using 1:col with lines 
    } else { 
    if(STATS_max < 1e-6) { 
     #draw to canvas 2 
     plot 'datafile' using 1:col with lines 
    } else { 
     #draw to canvas 3 
     plot 'datafile' using 1:col with lines 
    } 
    } 
} 

を試みたが、キャンバスの切り替えにはまだ問題を解決することができませんでした。

time 5.000/5.000 5.000/4.000 ... 
1e-5 7.6e-23  3.057e-17  ... 
0.002 3.4e-17  5.2e-13  ... 
.  .    .   . 
.  .    .    . 
.  .    .    . 

は、この動作を実現する方法はありますし、そうであれば、どのように:

ファイルが(あるタイトル1行目)のように見えますか? ありがとうございます。

答えて

0

まず、対応する列番号を別々の変数に集めて、スクリプトの最後にすべてをプロットすることができます。例えば、としてtest.datで:プロット以下

1 10 11 100 101 1000 1001 
2 20 21 200 201 2000 2001 
3 30 31 300 301 3000 3001 
4 40 41 400 401 4000 4001 
5 50 51 500 501 5000 5001 

スクリプトのみ「最初のグループ」、すなわち、列2および3:

fName = 'test.dat' 

set terminal pngcairo 
set out 'fig.png' 

#max. column number in the datafile 
N = 5 

#inspired by https://stackoverflow.com/a/35729052/5351549 
_group_1 = "" 
_group_2 = "" 
_group_3 = "" 

groupAppend(idx, col) = sprintf("_group_%d = _group_%d . \" %d\";", idx, idx, col) 

do for [col=2:N] { 
    stats fName using col nooutput 
    if(STATS_max < 1e2) { 
     eval groupAppend(1, col) 
    } else { 
     if(STATS_max < 1e3) { 
      eval groupAppend(2, col) 
     } else { 
      eval groupAppend(3, col) 
     } 
    } 
} 

plot for [i in _group_1] fName u 1:int(i) w l t sprintf("column %s", i) 

gnuplotの新しいバージョンでは、一方は次いでアレイを使用することができスペースで区切られた文字列として格納するこの間接的なアプローチではなく、列インデックスを保持することができます。

+0

完全に動作します。ありがとう! – camelCase