理系学生日記

おまえはいつまで学生気分なのか

忍者TOOLS

gnuplot での日時データの扱い

入社直後は Excel 使ってグラフ書いたら負けみたいなの思ってたけど、最近は諦めが当たり前みたいになって、アクセスログの集計結果を Excel に貼り付けてグラフ化して報告みたいなことしてた。
でも Excel は行数がなんか少なくて、Excel 2003 だと 2^{16} までしかない。Excel 2007 だと 2^{20} までになるけど、その行数までデータ貼り付けると、そもそも Excel ファイルがクソ重いみたいなことになるし、グラフのシートに切り換えるときにグラフ描画処理が走り出してムダに待つことになるし、みんなつらい。
今日は長期間に渡ってリアルタイムデータをグラフ化しないといけないみたいなつらいことになったので、つらい、つらいって思って、昔とった杵柄みたいなかんじで gnuplot 使った。


gnuplot demo script: pm3d.dem

詰まったの、x 軸データが mm/dd/yyyy hh:MM:SS.SSS みたいなデータになってたことで、普通に

gnuplot> plot "a.dat" using 1:2 w l t "hoge"

ってやったら、

warning: Skipping data file with no valid points
                                        ^
x range is invalid

ってなってかなりつらいことになった。x 軸のデータを日時のフォーマットとして見てくれてないのが原因。gnuplot に「これは日時のデータなんだよ」って一々教えてあげる必要がある。

gnuplot> set xdata time
gnuplot> set timefmt "%m/%d/%Y %H:%M:%S"

そしたら gnuplot が「そういうフォーマットの日時データなんだな」って理解してくれるので、x 軸の範囲も

gnuplot> set xrange ["07/10/2013 00:00:00:":"07/11/2013 00:00:00"]

という形で明確に伝えることができる。

Excel 使ってたら、Byte を MByte に直すときにも一々計算用のカラム作らないといけなかったけど、gnuplot なら

gnuplot> plot "a.dat" using 1:($3/(1024*1024)) w l t "hoge"

みたいにかけるし良いと思う。

Excel で x 軸を日時にすると、内部的にシリアル値で扱われるので、x 軸の範囲や、格子の幅とかもシリアル値で書かないといけないので発狂しそうになってた。発狂しないように、今後は積極的に gnuplot 使っていきたい。