我尝试使用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内部时间表示,但我想知道是否有更优雅,更省时的方式。
答案 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