2

次のようなファイル内のデータからヒストグラムを作成しようとしています。

#Column 1   Column 2
#
0.0300      0.2126
1.0000e-4   0.0104
6.0000e-3   0.1299
1.0000e-4   8.0600e-3
1.0000e-4   0.0105
0.0190      0.2204
6.0000e-3   7.4900e-3
1.0000e-4   0.0952
6.0000e-3   7.4200e-3
1.0000e-4   0.0131
0.0190      0.3062
0.0190      0.2561
0.0300      0.9748
0.0300      0.9406
0.0300      0.0139
1.0000e-4   0.0281
0.0300      0.3625
1.0000e-4   0.0945
0.0300      0.5650
1.0000e-4   0.1045
6.0000e-3   0.2362
1.0000e-4   0.0180
1.0000e-4   0.1366
1.0000e-4   0.0195
0.0300      0.4652
0.0190      0.3505
0.0300      0.5146
0.0190      0.4319
6.0000e-3   0.2054
6.0000e-3   0.2377
0.0300      0.5281
1.0000e-4   0.1128
6.0000e-3   0.0623

コードを使用する場合:

n=20    #number of intervals
max=0.03 #max value
min=0    #min value
width=(max-min)/n        #interval width
hist(x,width)=width*floor(x/width)+width/2.0

plot 'data' u (hist(\$1,width)):(1.0) smooth freq w boxes lc rgb "blue" lt 1 lw 0.5 notitle

私は正しいヒストグラムを取得します:

正しいヒスト

しかし、条件行を使用すると:

plot 'data' u (hist((\$2<=0.5?\$1:1/0),width)):(1.0) smooth freq w boxes lc rgb "blue" lt 1 lw 0.5 notitle

私はこれを得る:

歴史が間違っている

gnuplot線が正しく追加されていませんが、代わりに別の列としてプロットされていることがわかります。

これを修正する方法はありますか?ありがとう!

4

1 に答える 1

3

これは、gnuplot が「欠落した」データを処理する方法の兆候であると思われます。欠損データに関しては、実際には次の点がわずかに異なります。

plot 'data' u 1:2 w lines    #connects lines across missing records
plot 'data' u 1:($2) w lines #doesn't connect lines when a missing record is encountered

この設計上の決定により、少し異なる症状が見られるのではないかと思います。

残念ながら、ここでは典型的な gnuplot データフィルターが役に立たなくなります :-(。幸いなことに、あなたの条件は簡単に移行できますawk:

plot "< awk '{if ($2 <= 0.5) {print $0}}' test.dat " u (hist($1,width)):(1.0) smooth freq w boxes lc rgb "blue" lt 1 lw 0.5 notitle

これで、gnuplot は必要なデータのみを認識します (NaN 値を認識しないため、新しいカウンターは作成されません)。

于 2012-08-23T12:40:54.623 に答える