頻度分布(ヒストグラム)をGnuplotで描く方法については,ドキュメントにtips (PDFへのリンク)があり,Qiitaにも頻度分布の描き方が投稿されていて,それらを読めばどうすればよいかわかるけれども…とりあえず,メモということで.
使用環境
- macOS 10.12.5
$ gnuplot --version
gnuplot 5.0 patchlevel 6
描き方
ドキュメントによれば,using x:y smooth frequency
とすると,x
が同じものについてのy
の合計値がプロットされる.
そして,x
とy
には式が書ける.
ということは,y
に相対値を記述すればよい.つまり:
binwidth = <something>
bin(val) = binwidth * floor(0.5 + val / binwidth)
plot "datafile" using (bin(column(1))):(1.0 / (binwidth * STATS_records)) smooth frequency with boxes
また,with boxes
のデフォルトの描画方法だと,頻度0の箇所の隣の頻度が0でない場合,幅が伸びたboxが描画されてしまうようだ(デフォルトの描画ルーチンが累積値用のものになっている?).
そこで,boxの幅をbinwidth
で固定するとよい:
set boxwidth binwidth
注意点
- データファイルが複数のブロックを持つ場合,
every
を使用して間引こうとしても正しく描画できないようだ.- 自分が用意したデータファイルに原因があるかもしれない.詳細には再現や検証をしていない.
- あるいは,そもそも単一ブロックを想定しているのかもしれない(未確認).
- 上の
bin
は四捨五入のつもりだが,実際には正へのバイアスがかかる丸めである.-
ここで定義されている
filter(x, y) = int(x / y) * y
は0への丸めになっている.
-
ここで定義されている
- 対数プロットは描画できない場合がある.
- 頻度0の領域があるからか?
- 原因と解決方法は未調査
参考情報
TODO
- 具体的なサンプルスクリプト