カテゴリー
Software

gnuplotのデータプロットで日付を扱う場合

gnuplotのグラフ出力において横軸を日付にしたい場合で、
しかも日付データが都合の良い形式になっておらず
ある程度編集が必要な場合を想定しています。
ここでは日付を “2011/01/01” のようにスラッシュ区切り、
0埋めの形式にしてみます。

例えば日付データが次のような場合

年、月、日がそれぞれ数値として別々のセルに入っている。
※値1、値2はrand()関数で適当な値を並べています。

後の編集の都合により列を挿入しておきます。

空白のセル(D2)に次の式を書きます。

=TEXT(A2,"0000") & "/" & TEXT(B2, "00") & "/" & TEXT(C2, "00")

実際の画面はこのようになります。(LibreOffice Calcの例)

セルの内容が期待通り “2011/01/01” と表示されたらオートフィル機能により
必要なところまでドラッグします。

挿入した列に期待通りの日付がセットされたら、値の列も含めて
必要な範囲を選択してコピーします。

そして新しいシートを選択して「形式を指定して貼り付け」
テキストと数のみにして貼り付けます。

「名前を付けて保存」します。このときファイルの種類を「テキスト CSV」とします。
※Excelの場合は CSV(カンマ区切り)です。適宜読み替えてください。

これでCSVデータが準備できたので、gnuplotにうつります。
wgnuplotを起動
CSVデータを保存したフォルダへ移動します。
例えば、CSVデータをマイドキュメント内の gnuplot というフォルダに保存した場合。

gnuplot> cd "C:/Users/(ユーザ名)/Documents/gnuplot"

X軸を日付(time)にセットします。

gnuplot> set xdata time
数値形式(numerical)に戻す場合は、
gnuplot> unset xdata
または
gnuplot> set xdata

日付形式をセットします。

gnuplot> set timefmt "%Y/%m/%d"

オプションの詳細はオンラインドキュメントの
“Time/Date data”
の章を参照してください。
http://www.gnuplot.info/documentation.html
PDF形式で日本語のドキュメントも用意されているようです。
次にセパレータをカンマ区切りにセットします。

gnuplot> set datafile separator ","

ここまでの作業でプロットの準備ができましたので、
ためしにプロットしてみます。

gnuplot> plot "datafile.csv" using 1:2 with linespoints;


期待通りのグラフが画面に表示できたらこれを画像ファイルに保存します。

現在の出力形式は、
gnuplot> show terminal
で確認できます。
png形式で出力する場合は、
gnuplot> set terminal png
ちなみに、対応している出力形式の一覧は、
gnuplot> set terminal

そして、保存先のファイル名を指定します。

gnuplot> set output "dataplot.png"

これでプロットを実行すれば、出力結果がpng形式で”dataplot.png”に保存されます。

gnuplot> plot "datafile.csv" using 1:2 with linespoints;

このままだと出力先のファイルがロックされたままになりますので、
プロットを実行した後は、出力先を元に戻しておきます。

gnuplot> set terminal wxt
gnuplot> set output