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

How to plot time series in gnuplot?

我必须在 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 更长)。可能吗?

如果您希望您的 x 轴被解释并格式化为时间,您可以这样做:

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

这给出了以下情节:

编辑:如果第一列中的数字表示从 1/1979 开始的月份(即 1 = 01/1979,2 = 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()):2 w lp ls 4 lw 3

上面的命令序列输出