で動作させることができませんでしたset xdata time
。なぜなら、出力には月の日のみが使用可能であり、これは の範囲内[1:31]
にあるため、0
-position は で始まるから1
です。総時間数についても同じことが起こります。これは、その値が に制限されている[0:23]
ためです23
。
これは時間データのない解です。この関数を使用しstrptime
て日付文字列をタイム スタンプ (秒単位) に変換し、それを 3600 で割って (浮動小数点数として) 時間を取得します。
テスト データ ファイルは次のとおりです。
2013-08-25 18:45:11 100
2013-08-25 19:11:23 200
2013-08-25 20:00:32 400
2013-08-25 21:00:32 300
2013-08-26 20:11:12 500
スクリプト例:
reset
file='data.txt'
fmt="%Y-%m-%d %H:%M:%S"
start=system('head -1 '.file)
start_stamp = strptime(fmt, start)
plot 'data.txt' using ((strptime(fmt, stringcolumn(1).' '.stringcolumn(2))-start_stamp)/3600.0):3 with lines t ''
最初の列は、外部ツールで抽出されます。
結果は次のとおりです。

そして、これはコンマを区切り文字として使用する、より快適なデータ形式を使用する別のバリアントであり、最初の列は gnuplot で抽出されます。
データファイル:
2013-08-25 18:45:11,100
2013-08-25 19:11:23,200
2013-08-25 20:00:32,400
2013-08-25 21:00:32,300
2013-08-26 20:11:12,500
スクリプト ファイル:
reset
file='data.txt'
fmt="%Y-%m-%d %H:%M:%S"
set datafile separator ','
plot 'data.txt' using ($0 == 0 ? start_stamp = strptime(fmt, stringcolumn(1)) : 0, \
(strptime(fmt, stringcolumn(1))-start_stamp)/3600.0):2 with lines t ''
結果は同等です。
編集: @andyras と私の回答を組み合わせた最後のバリアントです。set timefmt
を明示的に呼び出して使用するとtimecolumn
、入力を時間として解析できます。出力は、従来の double 数のように処理されます。$0
オフセット値を設定するために、つまり現在のサンプルの番号を使用します。
reset
set timefmt "%Y-%m-%d %H:%M:%S"
offset = 0
t0(x)=(offset=($0==0) ? x : offset, x - offset)
plot 'data.txt' u (t0(timecolumn(1))/3600.0):3 notitle w l