5

[date, value] 形式のデータ (経時的な CPU 使用量) をプロットしており、xtics を最初の日付ではなく 0 または 1 から開始したいと考えています。

したがって、10 時間の場合は次のようになります: 0:01:00, 0:02:00, .., 0:10:00insead of 9:23:00 ...(データの最初の日は 9 日の午後 11 時であるため)。

私の現在の日時設定:

set xdata time
set timefmt "%Y-%m-%d %H:%M:%S"
set xtics format "%d:%H:%M" font ",25"

編集: 日付情報なしで x 軸の 0 から始まる時間をカウントする方法があれば、それも素晴らしいでしょう。どちらにしても。「かかった時間」を明確にするために、0からカウントを開始したいだけです。

4

2 に答える 2

2

で動作させることができませんでした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
于 2013-09-16T19:58:17.847 に答える
1

これは完全な答えではありませんが、そのように投稿するのに十分近いです。

時間ゼロでタイムファイルを開始できる方法があります(私の古い質問に対するこの回答に触発されました):

set xdata time
set timefmt "%Y-%m-%d %H:%M:%S"
set xtics format "%d:%H:%M" font ",6"

first = 0
offset = 0
# returns data offset by first value
t0(x)=(offset=(first==0)?x:offset,first=1,x-offset)

plot 'data.dat' u (t0(timecolumn(1))):3 notitle

ここにいくつかのサンプルデータがあります

2013-09-16 00:14:00 1
2013-09-26 00:15:00 3
2013-10-04 00:16:00 2
2013-10-19 00:17:00 4

そして出力:

ここに画像の説明を入力

この戦略には、データが 31 日を超えると日付カウンターがリセットされるという問題があります。

データ列を操作するために xtics 形式を取得する方法がわかりませんでした。

于 2013-09-16T19:52:38.490 に答える