2014-02-20 70 views
1

我嘗試使用Gnuplot可視化隨着時間的推移的一些計算機系統的可用性。對於每個系統,我想繪製一條水平線,當系統「關閉」時,該水平線會在所有時間段中斷。gnuplot:xdata時間和計算

要生成水平線,我想使用「1/0」-trick生成一個常數函數,它對於某些x值是未定義的。

最後,它應該看起來像:

↑ 
2 ┼ ++++++++++++ +++++++++++++    ++++++++ 
    │ 
1 ┼ xxxx xxxxxxxxxxxxxxxxxxxxxxxxx  xxxxxxxxxxxxx 
    │ 
0 └─┼────┼────┼────┼────┼────┼────┼────┼────┼────→ 
    2011-01-01    2011-06-01 

現在我的問題是:gnuplot的可以用「設置外部數據時」處理基於時間的數據。有什麼方法可以用時間/數據值「計算」?下面的代碼說明了我的意思(除了「暗算」命令作品的一切。)

set xdata time 
set timefmt "%Y-%m-%d" 

set xrange ["2011-01-01":"2013-12-31"] 

plot ((x > "2012-01-01") && (x < "2012-05-20")) ? 1 : 1/0 with lines; 

而是解釋「2012-01-01」隨着時間的數據,並將其轉換成其內部時表示,gnuplot的單位計算的2012 - 1 -1 = 2010並將其解釋爲「2000-01-01 00:00:00之後的2010秒」。

當然,我可以手動計算我所有時間點的Gnuplot內部時間表示,但我不知道是否有更優雅和更省時的方式。

回答

1

在時間模式下,x自2000-01-01開始以秒爲單位給出(或者在開發版本中爲Unix時間戳)。

您可以使用strptime從字符串表示形式轉換到秒:

fmt = "%Y-%m-%d" 
set xdata time 
set timefmt fmt 

set xrange ["2011-01-01":"2013-12-31"] 

plot ((x > strptime(fmt, "2012-01-01")) && (x < strptime(fmt, "2012-05-20"))) ? 1 : 1/0 with lines 
+0

strptime()正是我希望能找到!我在Gnuplot手冊中錯過了它,因爲它在_Time/Date data_章節中沒有提及,但僅在_String functions_下提到。 – dasup