2

次のようなファイルがあります

$cat myfile.dat

1 8 32 19230 1.186 3.985
1 8 64 9620 0.600 7.877
1 8 128 4810 0.312 15.136
1 8 256 2410 0.226 20.927
1 8 512 1210 0.172 27.708
1 8 1024 610 0.135 35.582
1 8 2048 310 0.121 40.172
1 8 4096 160 0.117 43.141
1 8 8192 80 0.112 44.770
.....
2 8 16384 300 0.692 6.816
2 8 32768 150 0.686 6.877
2 8 65536 80 0.853 5.904
2 10 320 7830 1.041 4.575
2 10 640 3920 0.919 5.189
2 10 1280 1960 0.828 5.757
2 10 2560 980 0.773 6.167
2 10 5120 490 0.746 6.391
2 10 10240 250 0.748 6.507
2 10 20480 130 0.770 6.567
....
3 18 8192 10 1.311 12.759
3 20 32 650 1.631 3.978
3 20 64 330 0.838 7.863
3 20 128 170 0.483 14.046
3 20 256 90 0.508 14.160
3 20 512 50 0.559 14.283
3 20 1024 30 0.665 14.405
3 20 2048 20 0.865 14.782
3 20 4096 10 0.856 14.932
3 20 8192 10 1.704 14.998

ご覧のとおり、x軸として必要な列に応じて、この情報をプロットする多くの方法があります。情報をプロットする方法の 1 つは、1 列目に対して 6 列目です。

p "myfile.dat" u 1:6

ここに画像の説明を入力

私の主な質問は、達成されたピーク値のみに関心があり、ドットの頻度や密度領域には関心がないため、これらのバーを実線のボックスとしてプロットする方法があるかどうかです。

4

2 に答える 2

2

Gnuplot にはオプションがあり、たとえば、同じ-value のすべての -values を合計するsmoothために使用できます。残念ながら、ここで必要な はありませんが、ステートメントを少し工夫することで「エミュレート」できます。smooth frequencyyxsmooth maximumUsing

reset
xval = -1000
max(x, y) = (x > y ? x : y)
maxval = 0
colnum = 6

set boxwidth 0.2

plot 'mydata.dat' using (val = column(colnum), $1):\
     (maxval_prev = (xval == $1 ? maxval : 0), \
      maxval = (xval == $1 ? max(maxval, val) : val),\
      xval = $1, \
      (maxval > maxval_prev ? maxval-maxval_prev : 0)\
     ) \
     smooth frequency lw 3 with boxes t 'maximum values'

すべてusingのエントリは、コンマで区切られたさまざまな割り当てで構成できます。

新しいx値が表示されると、変数が初期化されます。データは によって単調になるため、これは機能xsmooth frequencyます。

現在値が保存されている最大値より大きい場合、保存されている最大値と現在値の差が加算されます。潜在的に、これは加算と減算の繰り返しによる数値エラーを引き起こす可能性がありますが、サンプル データから判断し、プロットの解像度を考えると、これは問題にはなりません。

データの結果は次のとおりです。 ここに画像の説明を入力

于 2013-08-14T18:51:34.033 に答える
1

最大値を検索してそれのみをプロットすることもできますが、多くのボックスを重ねて描画する場合でも、おそらくこれの方が簡単です。

plot "myfile.dat" using 1:6:(.1) with boxes fillstyle solid
于 2013-08-14T13:40:58.383 に答える