gnuplotでCSVファイルをプロットする方法

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

突然AndroidWearの加速度センサーで取得した加速度をグラフ表示したくなったので,
やってみます.

時間データを扱うので,そこの設定も行います.

加速度データはあらかじめCSV形式に整形してあるので,
それを読み込ませます.

こんな感じで「時間,X,Y,Z」というフォーマットにしました.

final DateFormat df = new SimpleDateFormat("HH:mm:ssSSS");
final Date date = new Date(System.currentTimeMillis());
String SEND_DATA = df.format(date)+","+x+","+y+","+z+","+sum+"\n";

こんな感じに出力されます.

13:30:08167,-0.016460137,0.24540567,9.58803
13:30:08210,-0.016460137,0.24540567,9.58803
13:30:08254,-0.02124854,0.20949265,9.621549
13:30:08272,-0.014065935,0.20470424,9.568876
13:30:08316,-0.009277532,0.25498247,9.657461
13:30:08353,-0.057161566,0.23343466,9.532963
13:30:08393,-0.042796355,0.23582886,9.674221
13:30:08433,-0.03561375,0.21906945,9.568876
13:30:08476,-0.028431145,0.25737667,9.607183
13:30:08518,-0.028431145,0.25737667,9.607183
13:30:08553,-0.07152677,0.19752164,9.621549
13:30:08593,-0.047584757,0.2669535,9.509021
13:30:08633,-0.016460137,0.22146365,9.645491

時間フォーマットを設定する.

加速度センサーの値をグラフにしたいので,Y軸は加速度,X軸は時間になります.

gnuplotはそのままでは時間データを扱えないので,
gnuplotにX軸は時間だよと教えてあげます.

#時間フォーマットの設定
set xdata time
set timefmt "%H:%M:%s"
set format x "%H:%M:%s"
#秒のときは%S,エポックミリ秒のときは%sです.

扱える日付フォーマットはリファレンスを参考にしてください.

CSVフォーマットを設定する

今度はCSV形式のファイルが読み込めるように,設定します.

#csvフォーマットの設定
set datafile separator ","

カンマ<“,”>以外にもタブ<“\t”>や任意の文字で区切ることができます.
ちなみにデフォルトはスペース<” “>区切りが設定されているようです.

プロットする

これで加速度データが入ったCSVファイルをグラフにプロットする準備ができました.

file_name="sensor.csv"
plot file_name using 1:2 with linespoints, file_name using 1:3 with linespoints, file_name using 1:4 with linespoints;

最初にファイル名を変数に入れているのは,複数ファイルをプロットしたいときに便利かと思ったからです.
実行すると,加速度センサーのグラフが表示されました.

スマートウォッチを装着した状態で歩いてみたのですが,
意外と綺麗に歩行ステップが検出できていますね.(4歩分)
実際に加速度を使うときは高周波数域を取り除くローパスフィルターを用いるのが一般的なようです.

次回は加速度センサーにローパスフィルターを試してみます.

参考にしたサイト

[gnuplot] エポックミリ秒を軸にしてグラフを書く|ihirokyの日記

gnuplot でデータをプロットしてみるNPM LOG

Gnuplot公式リファレンス

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

コメントを残す

*