gnuplot:xdata time&计算

时间:2014-02-20 23:59:41

标签: date time gnuplot

我尝试使用Gnuplot随着时间的推移可视化许多计算机系统的可用性。对于每个系统,我想绘制一条水平线,当系统“关闭”时,所有时间段都会中断该水平线。

要生成水平线,我想使用“1/0”-trick来生成一个常量函数,该函数对于某些x值是未定义的。

最后,它应该看起来像:

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

现在我的问题是:Gnuplot可以使用“设置xdata时间”处理基于时间的数据。有没有办法用时间/数据值“计算”?以下代码说明了我的意思(除了“plot”命令之外的所有内容都有效。)

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;

Gnuplot计算2012 - 1 -1 = 2010并将其解释为“2000-01-01 00:00:00之后的2010秒”,而不是将“2012-01-01”解释为时间数据并将其转换为内部时间表示。 ”

当然,我可以手动计算所有时间点的Gnuplot内部时间表示,但我想知道是否有更优雅,更省时的方式。

1 个答案:

答案 0 :(得分:1)

在时间模式下,自2000-01-01以来,以秒为单位给出x(或者在开发版本中为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