gnuplotでストリームデータをプロットする
Qiitaからの移動
gnuplot
でストリームデータ(パイプなど)をプロットしたいと思ったが,案外面倒だったので方法とモジュール.
ストリームデータのプロット方法
ストリームデータのプロット方法を見ると,pause
,reread
の組み合わせなどが載っている(ここなど).ただ,どれも基本的にpollingで追加データをプロットしているので,更新間隔は必要に応じて変える必要がある.
一方,ファイルの変更を監視する(e.g., inotify
)しようとすると,gnuplot
上では動かないので,reread
は使えない(と思う).すなわち,gnuplot
でpollingに頼らずストリームデータをプロットするには,
- ファイルや
stdin
の変更を監視する. - 変更されたら一時ファイルにその変更を反映する.
gnuplot
上で,replot
または,plot ...
をすることでプロットを更新する.
という3つの処理を行う必要がある.
npmモジュール (sgnuplot)
上記処理は案外面倒だったので,npmのモジュールにまとめて公開した(使い方はREADME参照).inotify
があればシェルスクリプトでも書ける程度の内容だが,エコシステムがなく管理が難しいと感じたためnpmにした.
また,logrotate等は考慮していないが,長期間の可視化をするためのものではないので,問題はないのではないかと思う.
時間がかかる計算のログを確認したい時に,tail -F
よりは見やすいツールとして使えるのではと期待(使ってはいない).