LoginSignup
0
0

More than 5 years have passed since last update.

Gnuplotで相対頻度分布を描く

Last updated at Posted at 2017-08-09

頻度分布(ヒストグラム)をGnuplotで描く方法については,ドキュメントにtips (PDFへのリンク)があり,Qiitaにも頻度分布の描き方が投稿されていて,それらを読めばどうすればよいかわかるけれども…とりあえず,メモということで.

使用環境

  • macOS 10.12.5
$ gnuplot --version
gnuplot 5.0 patchlevel 6

描き方

ドキュメントによれば,using x:y smooth frequencyとすると,xが同じものについてのyの合計値がプロットされる.
そして,xyには式が書ける.
ということは,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

  • 具体的なサンプルスクリプト
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0