GNUPLOT

- not so Frequently Asked Questions -

update 2004/11/15

日付/時間型データの表示

1 | 2 | 3 | 4

時系列型データを用意する.

データが日にちや時間となっている時系列データをプロットするには,まず set xdata time set ydata time を使ってデータ が日付型であることgnuplotに教え,さらに set timefmt で日 付/時間の表示がどのようになっているかを与える必要があります.始めに データとしては以下のようなものを考えます.

2004-02-09  310
2004-02-10  185
2004-02-11  239
2004-02-12  132
2004-02-13   85
2004-02-14   57
2004-02-15    8

この日付のデータをgnuplotに読み込ませるには,timefmtとして "%Y-%m-%d" を与えます.この例では月と日にちが10未満の時に頭にゼロを パディングして桁数をそろえていますが,これをしなくとも(例えば 2004-2-9というデータでも)同じフォーマットで正しく読み込まれます.

gnuplot> set xdata time
gnuplot> set timefmt "%Y-%m-%d"
gnuplot> plot "sample.dat" using 1:2 with boxes
fig/sampleS1.1.png

gnuplotでは日付/時間型データをかなり柔軟に読み込めるようになっていま す.ファイル中のデータ表式と timefmtで与えるフォーマットの 対応の例を以下に挙げます.

データ表示形式 timefmt comment
2004/4/6 %Y/%m/%d 2004/04/06でも可
December/96 %B/%y spellingを間違えるとwarningがでます
2004/Jan %Y/%b 3文字の略名
1970/240 %Y/%j "%j"は一年間の第何日目(1-365)
02:45:03 %H:%M:%S 時間は24時間制
1076909172 %s 1970年1月1日0時からの秒数
up

出力文字列を整える.

gnuplotは日付/時間型のデータをX座標データとして読み込むと,そのデー タに合った形でX軸にメモリを表示します.上の一週間分のデータの例なら, "月/日"が出力されます.しかしながら,ここではやや余分な"00:00"とい う時間まで表示されています.出力の表示形式を制御するには set format を用います.ここでのフォーマット指定は通常の数値出力とは異なり,UNIXのライブラリ strftime関数でのフォーマットとなります.

gnuplot> set xdata time
gnuplot> set timefmt "%Y-%m-%d"
gnuplot> set format x "%b/%a"
gnuplot> plot "sample.dat" using 1:2 with boxes
fig/sampleS2.1.png

上の表に挙げたフォーマットに加えて,この例のように "%a" という timefmtにはない,曜日を出力するフォーマットを指定すること が可能です.詳しくはstrftime関数のマニュアルを参照してください.色々 な出力が可能ですが,現実的には上の表に挙げてあるような Y, y, m, d, H, M, S で十分では無いでしょうか.


up