如何在 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
上面的命令序列输出
我必须在 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
上面的命令序列输出