Gnuplot绘制时间序列图的不正确时间

时间:2014-05-22 10:01:49

标签: plot gnuplot time-series

我正在打印具有以下格式的时间序列

> 1400536853 0.011955 
> 1400537188 0.013695 
> 1400537530 0.010797  
> ....
> 1400621709 0.010688 
> 1400622023 0.007209 
> 1400622338 0.006685 
> 1400622653 0.005539

第一列是unix epoch格式的时间戳,第二列是要绘制的变量。 请注意,第一行的时间戳对应于“Tue May 20 00:00:53 CEST 2014”,最后一行对应于“Tue May 20 23:50:53 CEST 2014”。我用以下命令验证了这一点:

date -d @<timestamp>

我正在使用以下脚本绘制时间序列

set xdata time
set timefmt '%s'
set format x '%H'
plot 'series.txt' using 1:2 with lines notitle

但是我得到了一个小时数在22,00:02 ...... 22之间的情节,如下图所示:

time series plot

我将很感激有关如何解决此问题的任何建议。这可能与未正确设置时区有关吗?非常感谢提前

2 个答案:

答案 0 :(得分:6)

Gnuplot无法更改时区并将UTC用于所有时间数据。这是您的2小班制来自:

$ date -u -d @1400536853
Mo 19. Mai 22:00:53 UTC 2014

在您的具体情况下,您只需在using声明中添加两个小时:

set xdata time
set timefmt '%s'
set format x '%H'
plot 'series.txt' using ($1 + 2*60*60):2 with lines notitle

请注意,这明确假设您只在同一时区的计算机上运行脚本。我认为在gnuplot中没有通用的方法来转换时区,因为它不支持它们。

答案 1 :(得分:4)

Christoph's answer之后,我想出了如何在调用gnuplot的脚本中以通用方式计算偏移量:

   LOCAL=$(date)
   UTC=$(date -u -d "$LOCAL" +"%Y-%m-%d %H:%M:%S")  #remove timezone reference
   UTCSECONDS=$(date -d "$UTC" +%s)
   LOCALSECONDS=(date -d "$LOCAL" +%s)        
   TIMEZONEGAP=$(($LOCALSECONDS-$UTCSECONDS))

然后在gnuplot中我可以使用这个建议的差距