如何在gnuplot中绘制时间序列?

时间:2015-10-28 22:37:48

标签: plot gnuplot time-series

我必须在gnuplot中绘制一个时间序列。我知道有一种格式化x轴以显示日期的方法,但我想要绘制的文件必须在列时间中包含日期。例如,如果我必须绘制这个时间序列:

TIME    VAR 1
01/01/79    -1.8351
01/02/79    0.6315
01/03/79    -1.3365
01/04/79    2.1251
01/05/79    -0.6708
01/06/79    -3.3965
01/07/79    -0.2298
01/08/79    0.4807
01/09/79    -2.4213
01/10/79    -0.5998
01/11/79    -1.0238
01/12/79    -0.2025
01/13/79    0.4362
01/14/79    -1.1263
01/15/79    3.3197
01/16/79    0.0337
01/17/79    -0.7374

我会使用这个命令行:set xdata time set timefmt "%m%d%Y"并且它完美无缺。但是,如何用这种格式绘制时间序列:

TIME    VAR 1
1   -1.8351
2   0.6315
3   -1.3365
4   2.1251
5   -0.6708
6   -3.3965
7   -0.2298
8   0.4807
9   -2.4213
10  -0.5998
11  -1.0238
12  -0.2025
13  0.4362
14  -1.1263
15  3.3197
16  0.0337
17  -0.7374
18  1.1504
19  -0.1656
20  -0.4389
21  1.4645
22  1.6538
23  1.6362
24  -2.0363
25  -4.9741

我希望在x轴上显示1979年到2014年的日期(显然我的ts更长)。有可能吗?

1 个答案:

答案 0 :(得分:2)

如果您希望将x轴解释并格式化为时间,则可以执行以下操作:

set xdata time                         
set timefmt "%Y"
set xtics rotate
f(x)=sprintf("%d", x+1978)
plot 'test' u (f($1)):2 w lp

这给出了以下情节: enter image description here

编辑:如果第一列中的数字代表从1/1979开始的月份(即1 = 01 / 1979,7 = 02/1979),则函数f(x)和时间格式必须适当调整:

set xdata time                         
set timefmt "%m-%Y"
set xtics rotate
f(x)=sprintf("%d-%d", int(x-1)%12+1, 1979+floor((x-1)/12))
plot 'test' u (f($1)):2 w lp ls 4 lw 3

以上命令序列输出 enter image description here