gnuplotでの日時データのプロットについて

日時データのグラフ

日時データのグラフとは

gnuplotで描こうとしているグラフのデータファイルで、横軸(x軸)が単なる数字ではなく日時データの場合というのはよくあります。例えば、1時間毎に室温を測定してそれを24時間分まとめてグラフにしたいとか、毎日の体重を1年分グラフにしたいなど。

表計算ソフトとの違い

当然ながらgnuplotでもそのようなグラフを描くことが出来ます。ただし、日時データの取り扱いについては軸の設定や入力データのフォーマットなどを個別に設定する必要があります。表計算ソフトだとデータファイルを読み込むと自動で日時データとして解釈してくれるのであまり意識せずにグラフを描けますが、gnuplotではそうはなっていません。
そのため日時データはそれほど扱わない場合、gnuplotでいざグラフを描こうとすると日時の取り扱いについて調べるのが手間になったりします。それでも一度基本を押さえておくと後で楽になるので、ざっと説明していきます。

基本の設定

日付部分が以下のようなデータファイル(test01.dat)を仮定します。
1列目が「月/日」、2列目が「時:分」、3列目がその時刻の時のデータ値です。
11/12 15:21 10
11/12 16:11 13
11/12 16:46 7
11/12 17:01 14

そしてこれを1行目、2行目を日時として認識してプロットするには
gnuplot> set xdata time
gnuplot> set timefmt "%m/%d %H:%M"
gnuplot> set format x "%H:%M"
gnuplot> plot "test01.dat" using 1:3 with linespoints

とします。これで出来るグラフは以下の通り。

さて基本的には日付データのを描くときはこのような設定になるのですが、これだけだと分かり難いのでもう少し詳しく1行ずつ解説していきましょう。

set xdata time

1行目の「set xdata time」はx軸で日時データを扱うという指定です。ここでは単にx軸では日時データを扱うという指定だけです。x軸ではなく、入力データファイルの日付データをどう扱うかは次の「set timefmt」で指定します。
なお、設定を戻すには「set xdata」とします。

set timefmt

2行目の「set timefmt "%m/%d %H:%M"」で入力ファイルの日時をどう読み取るかを指定しています。%mや%Hの記号の説明はまた別の機会にしますが、ここで書いている「"%m/%d %H:%M"」というフォーマットで日時「11/12 16:46」という形式を読み取ります。

set format x

3行目の「set format x "%H:%M"」は出力するグラフのx軸の目盛り数字の書式の指定です。例に使っているデータの日付はすべて11/12なので、ここでは日付は無視して時刻"%H:%M"を目盛りに使っています。

plot

最後の行のplotでグラフ出力をしているのですが、日時データを扱う場合は必ずusingで列の指定をする必要があります。今回は「11/12 16:11 13」というデータなのでusingではyの値として3列目を指定する必要があります。xの値は1列目なのか2列目なのかは少し疑問に思うのですが、どうやら1列目として指定すればいいようです(おそらく内部では1,2列目がまとめて1つの列として扱われていると思われます)。

基本の設定のまとめ

解説していてなんですが、日時データの扱いは自分でもよくどう設定すればいいか忘れてその都度調べ直しています。まぁ覚えやすいところに基本の設定を書いて、その都度それをコピペするか、それともテンプレートファイルとして基本設定のファイルを作っておけばいいでしょう。日付や時刻部分のフォーマットは入力データに合わせてその都度作り直す必要が出てきますが、それもあらかじめいくつか作っておけばいいかと思います。地味にハマるポイントとしてはusingでデータ部分を指定していたと思ったら、日時部分が指定されていた場合ですね。こればっかりは注意してミスが無いようにしましょう。

簡単に基本設定について何をやっているのかまとめると
  1. x軸で日時データを扱うよう設定(xdata time)
  2. 入力ファイルを読み取るフォーマットを設定(timefmt)
  3. グラフを描く時のx軸の目盛り書式を設定(format x)
  4. プロットでグラフを描く(plot, using)
となります(順番についてはこの通りで無くてもそれなりに大丈夫)。

最後に

日時指定の方法や、gnuplotでの日時の扱いの細かい説明はまた別でブログ記事を作ってすることにします。

(2018年11月14日 追記) 日付データのフォーマットについてのブログ記事作りました。
gnuplotの日時データ扱いのフォーマット

その他、gnuplot関連のブログ記事


Amazon データ解析関連書籍など

コメント

スポンサーリンク


このブログの人気の投稿

Ubuntu Softwareが起動しないのでいろいろと調べてみる(Ubuntu 20.04.1 LTS)

gnuplotでプロットなどの色をcolornameの指定で変更する

gnuplot : グラフにグリッド線を描く方法(set grid)

gnuplot : プロット画像のサイズ指定について(set sizeとの違い)

Pythonのformat()を使って1桁の16進数でも2桁で出力する方法