2017-06-27 9 views
0

私のgnuplotスクリプトは、データ内の特定のポイントにラベルまたは矢印を挿入したいとしましょう。データは別のプログラムで作成され、データファイルのヘッダー行にエンコードできます。残念ながら、gnuplotはデータを引き出すために columnheader(num)を使用することができません。データヘッダーを介して変数値をgnuplotに渡す

例。平均、シグマ、いくつかの限界値を含むヒストグラムデータを作成します。データファイルを書き込むプログラムは、それを最初の行に置きます。次のようになります(0.2743は、平均で、3.0は、外れ値の上限である)

"Data" 0.2743 1.0 
    0 "-INF -> -5.0"  0 0.00 
    1 " -5.0 -> -4.5"  0 0.00 
    2 " -4.5 -> -4.0"  2 0.03 
    3 " -4.0 -> -3.5"  4 0.06 
    4 " -3.5 -> -3.0"  3 0.05 
    5 " -3.0 -> -2.5"  5 0.08 
    6 " -2.5 -> -2.0"  19 0.30 
    7 " -2.0 -> -1.5"  49 0.78 
    8 " -1.5 -> -1.0" 193 3.07 
    9 " -1.0 -> -0.5" 527 8.39 
    10 " -0.5 -> +0.0" 1289 20.53 
    11 " +0.0 -> +0.5" 1878 29.90 
    12 " +0.5 -> +1.0" 1411 22.47 
    13 " +1.0 -> +1.5" 636 10.13 
    14 " +1.5 -> +2.0" 178 2.83 
    15 " +2.0 -> +2.5"  56 0.89 
    16 " +2.5 -> +3.0"  17 0.27 
    17 " +3.0 -> +3.5"  9 0.14 
    18 " +3.5 -> +4.0"  4 0.06 
    19 " +4.0 -> +4.5"  0 0.00 
    20 " +4.5 -> +5.0"  0 0.00 
    21 " +5.0 -> +INF"  0 0.00 

私はスクリプトからプロットに矢印を作成することを参照しようとしました。

... 
mean= columnheader(2) 
sdev= columnheader(3) 
lboffs= 0.2 
set arrow from 11.0 + mean,0.0 to 11.0 + mean ,GPVAL_DATA_Y_MAX*1.2 nohead lw 2 lc rgb "dark-green" 
set arrow from 11.0 + mean - 3 * sdev,0.0 to 11.0 + mean - 3 * sdev ,GPVAL_DATA_Y_MAX*1.2 nohead lw 2 lc rgb "red" 
set arrow from 11.0 + mean + 3 * sdev,0.0 to 11.0 + mean + 3 * sdev ,GPVAL_DATA_Y_MAX*1.2 nohead lw 2 lc rgb "red" 
set arrow from 11.0,0.0 to 11.0,GPVAL_DATA_Y_MAX*1.2 nohead lw 2 lc rgb "blue" 
set label "Mean" at 11.0 + mean + lboffs,GPVAL_DATA_Y_MAX*1.1 tc rgb "dark-green" 
set label "+3%" at 11.0 + mean + 3 * sdev + lboffs,GPVAL_DATA_Y_MAX*1.1 tc rgb "red" 
set label "-3%" at 11.0 + mean - 3 * sdev + lboffs,GPVAL_DATA_Y_MAX*1.1 tc rgb "red" 
... 

これはうまくいきません。

gnuplot> mean= columnheader(2) 
     undefined function: columnheader 

gnuplot> sdev= columnheader(3) 
     undefined function: columnheader 

何が欠けていますか?あるいは、変数をgnuplotに渡すより良い方法がありますか?

おかげで、 ゲルト

答えて

0

機能columnheaderplot文脈の外では動作しません。ただし、データファイルの最初の行の値にアクセスするには、いくつかのオプションがあります。

stats fName every ::0::0 using 2:3 nooutput 
mean = STATS_min_x 
std = STATS_min_y 
:あなただけの非常に最初の行を選択するために everyとの組み合わせで statsコマンドを使用する場合があり、また

fName = 'input.dat' 

getColumn(n)=system(sprintf("head -n1 %s | awk '{print $%d}'", fName, n))*1. 
mean = getColumn(2) 
std = getColumn(3) 

たとえば、外部処理を使用することができます

関連する問題