我必须在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更长)。有可能吗?
答案 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
编辑:如果第一列中的数字代表从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