データの多いグラフで活躍する

まえがき

データロガーの集計データのような膨大なデータをグラフにするのは、 結構大変だ。Excelでやろうとすると巨大なファイルになってしまい、 再表示や印刷に異常なほど時間がかかる。OpenOffice Calcでやろうとしたが、 日付や時刻の扱いがうまくできないのと、巨大なデータからグラフを作ろうとすると 恐ろしく不安定になるようなのであきらめた。

市販のグラフ専用ソフトだと巨大なデータでも問題なく処理してくれるのだろうが、 10万円前後といい値段だったりする。

どうせデータの前処理に perl だの awk だの必要になるので Debian GNU/Linux 4.0 で gnuplot を使ってやってみることになったが、これが癖があって使いにくい。

インストール

Debian 4.0 (etch) で Synaptic Package Manager に gnuplot を検索させる。 plotdrop という GNOME 環境でデータファイルをファイルマネージャからドロップ すればとりあえず動くアプリケーションがあるので、これを選択してインストール すれば、gnuplot も一緒にインストールされる。

x11でのサイズと色指定

x11に出力するときのサイズと色指定が面倒だ。

gnuplot -geometry 1200x512 -persist \
   -xrm "gnuplot*line1Color: red" \
   -xrm "gnuplot*line2Color: black" example.plt

というような指定をして、example.plt で

set title "Somewhere Temperature"
set xlabel "Date"
set ylabel "Celsius"
set xdata time
set timefmt "%s"
set format x "%y/%m/%d"
set grid
plot "somewhere.dat" using 1:2 with lines title "somewhere", \
     "somewhere.dat" using 1:2 smooth bezier notitle with lines

とやれば、ベジエ補間の線が緑から黒に変わる

PNGへの出力

データロガーの出力 somewhere.dat と気象庁の過去の平均気温データ jma.dat を 同時にプロットする。

somewhere-temp-s.png

set terminal png size 640,280
set output "somewhere-temp-s.png"
set title "Somewhere Temperature"
set xlabel "Date"
set ylabel "Celsius"
set xdata time
set timefmt "%s"
set format x "%m/%d"
set grid
plot "somewhere.dat" using 1:2 title "somewhere" with lines,\
     "somewhere.dat" using 1:2 smooth bezier notitle with lines,\
     "jma.dat" using 1:2 title "jma data" with lines

日付と時刻は、予め perl で epoc day からの秒数に変換して から処理しているが、gnuplotで直接読み込むのも可能かもしれない。

#!/usr/bin/perl

use Class::Date qw(:errors date);

while (<>) {
    tr/\//-/;
    @a = split(' ');
    $date = date "$a[0] $a[1]";
    printf("%d %s\n", $date->epoch, $a[3]);
}

perlで Class::Date を使うために libclass-date-perl というパッケージを入れた。

問題点

  1. X軸が時系列だと自動範囲で前後にデータの無い箇所が余分につくことがある。 データの範囲は分かっているのだから明示的に範囲指定してみたが、どうもさらに おかしくなってしまう。
    set xrange ["05/01/07":"05/01/08"]
  2. 出来上がったx11のグラフの上でマウスを動かすと左下に座標が表示される。 plotdropで出来たグラフではそのような挙動は無いので、なにか設定があるのかもしれない。'm'キーを押せば消えるので、しばらくはこれで画面コピーして使うことになる。 画面コピーではなくpngファイルを直接作れるが、やはり結果を見ながら調整したほうがよい。
  3. gnuplot 4.0から出力が x11 のとき pause mouse とやると、グラフをマウスによる操作で視点の変更や部分拡大が出来るようだ。2Dプロットで右ボタンで範囲指定拡大させると、プロットしてすぐに終了してしまうようだ。やり方が間違っているのか?

リンク


添付ファイル: filesomewhere-temp-s.png 678件 [詳細]

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-09-29 (水) 11:38:13 (2552d)