海の響きを懐かしむ

観たもの聴いたもの読んだものの記録と、日記など

gnuplotをつかってみる

macbookgnuplotをインストールし、適当なグラフを生成してみる。

【reference】

  1. gnuplot development - Browse Files at SourceForge.net
  2. gnuplot - takataka
  3. GNUPLOTの第一歩


ダウンロードページ[1]より最新版のgnuplotをダウンロードし、展開。ディレクトリに入り

  • %./configure
  • %make
  • %sudo make install

which gnuplotしpathが通っていることを確認した後、
x11を立ち上げる

(xウィンドウ内で)


まずは、適当に[2]

とかすると、その場でグラフが表示される。
今回は、以前書いたPCのマイクのライン入力から音量を取得し、
時系列に沿って表示するグラフを書いてみる。
HappyInput.java — Gist

このプログラムでは、ロギングされた音量とその時間をテキストファイルとして書き出している。
例えば、以下のような感じになる。

 6:22:18 0.020965435
 6:22:23 0.046325415
 6:22:28 0.02244989
 6:22:33 0.02160580

これをgnuplotで読み込むには、

とすればよいが、基本的にテキストファイルをフルパスで指定してあげた方が良い。
今回は.txtでしか試していないが、他フォーマットでもいけるはず。


さらに、texで論文用にグラフを使うことを考えて、eps形式で画像としてグラフを保存したい。[3]

-gnuplot> set terminal postscript eps
-gnuplot> set output "test.eps"

これで一度グラフを作ったのだが、どうもx軸がおかしい。
というのもx軸が時間、y軸が取得した音量(sound level)のものを作ろうとしていたからだった。
時系列データを扱うには、

  • gnuplot> set xdata time(xが時系列データと指定)
  • gnuplot> set timefmt "%HM:%S"(時系列データの細かい区分を指定、この場合「時:分 : 秒」)
  • gnuplot> plot "hoge.txt" using 1:2

としなければいけない。
最後にusingを使うのは、どのカラムをどの軸にするか指定してあげるため。
何もしないとXに1stカラムを、Yに2ndカラムを使うはずだけれども、
xdata timeしたときは明示的に書かないといけないらしい。
ここは先輩に教えていただいてわかった箇所で、数時間詰んだ。


さらに教えていただいたのだが、

#!/bin/sh
/usr/local/bin/gnuplot
set terminal postscript eps
set output "test.eps"
set xdata time
set timefmt "%H:%M:%S"
plot "hoge.txt" using 1:2 title smooth csplines "Level"
EOS

というシェルスクリプトを書くことで、一発でグラフが作れる!!
これは素晴らしい。というわけでできたグラフが下。

f:id:mitsuba3:20100916211511p:image

gnuplotたのしい!