2012/06/17

making a histogram via gnuplot.

making a histogram via gnuplot.
gnuplot でヒストグラムを書く方法

---- 2014.05.12 ----
急いでいる人のために別記事でスクリプト作った。
コピペして、どうぞ。
for users in a hurry, have a look at the quick script below.
script
----

ネットでは既にbinと値が出来上がってからのヒストグラムの書き方がほとんどだった。
そこまでできてて一々メモを残す必要があるのか疑問だけど、まあいいや。

オレがやりたいのは生データからヒストグラムの解析&プロット。
実数の羅列からヒストグラムを書きたいの。

そういうわけで
http://mesa.ac.nz/wp-content/uploads/2012/05/all_presentations.pdf

ここを参考にしたら
以下のようなスクリプトでどうにかそれっぽいものが書けると判明。

----
bin(x,width) = width∗floor(x/width) + width/2
set ylabel ”Counts”
FILE='hoge.txt'
set multiplot layout 2,1 title "hoge"
set style fill solid
set boxwidth 1.4
plot FILE using (bin($2,2)):(1.0) smooth frequency title "smooth freq" with boxes
plot FILE using (bin($3,2)):(1.0) smooth cumulative title "smooth cuml" linecolor 2 with boxes

*軸設定などは省略

(結果)


(解説)
1行目:bin(x,width) = width∗floor(x/width) + width/2
x軸にしたいデータの 値(実数)を越えない最大の整数を返す関数を定義
3行目:FILE='hoge.txt'
ファイル名を一々書かなくてよいようにエイリアスのようなものを定義
4行目:set multiplot layout 2,1 title "hoge"
一つの窓に複数のグラフを書く場合はmultiplot
レイアウトも縦,横 それぞれのコラム数で決定できる。
5行目:set style fill solid
ヒストグラムのboxを塗りつぶすオプション
6行目:set boxwidth 1.4
 各binのヒストグラムの幅を絶対量で決定
この設定だと両隣に少し隙間が空く。(bin幅=2)
 7、8行目
smooth を入れることでx軸上に1を羅列したプロットをbin毎に足し合わせる
or 合計してゆくことでヒストグラムが完成
$2, $3 などはデータファイルの2, 3 コラム目の値の変数表記。


当然、これよりも省略形を多用してコンパクトに書くこともできる
ちなみに
smooth frequency -> s f
smooth cumulative -> s cuml
と省略可能

----

smoothのデモスクリプトから色々派生できそう。
http://www.gnuplot.info/demo/smooth.html

さらに
set table "out.dat"

で結果を書き出すと
----
# Curve 0 of 1, 8 points
# Curve title: "FILE us (bin($3,2)):(1.0)"
# x y xlow xhigh type
 9  9  9  9  i
 11  6  11  11  i
 13  13  13  13  i
 15  8  15  15  i
 17  3  17  17  i
 19  3  19  19  i
 69  1  69  69  i
 9  1  8.3  9.7  u
----
のように出力されるので、ここからプロットすれば誤差棒を加えることも可能。
ちなみに i はプロットに入ってるもの。 u は図に入っていないものの意味。

0 件のコメント: