我set xdata time
无法让它[1:31]
与. 总小时数也是如此,因为该值被限制为,因此超过的数字被回绕。0
1
[0:23]
23
这是一个没有时间数据的解决方案。我使用该strptime
函数将日期字符串转换为时间戳(以秒为单位),然后将其除以 3600 得到小时(作为浮点数):
测试数据文件为:
2013-08-25 18:45:11 100
2013-08-25 19:11:23 200
2013-08-25 20:00:32 400
2013-08-25 21:00:32 300
2013-08-26 20:11:12 500
和示例脚本:
reset
file='data.txt'
fmt="%Y-%m-%d %H:%M:%S"
start=system('head -1 '.file)
start_stamp = strptime(fmt, start)
plot 'data.txt' using ((strptime(fmt, stringcolumn(1).' '.stringcolumn(2))-start_stamp)/3600.0):3 with lines t ''
使用外部工具提取第一列。
结果是:
这是另一个变体,它使用更舒适的数据格式,使用逗号作为分隔符,第一列是用 gnuplot 提取的:
数据文件:
2013-08-25 18:45:11,100
2013-08-25 19:11:23,200
2013-08-25 20:00:32,400
2013-08-25 21:00:32,300
2013-08-26 20:11:12,500
脚本文件:
reset
file='data.txt'
fmt="%Y-%m-%d %H:%M:%S"
set datafile separator ','
plot 'data.txt' using ($0 == 0 ? start_stamp = strptime(fmt, stringcolumn(1)) : 0, \
(strptime(fmt, stringcolumn(1))-start_stamp)/3600.0):2 with lines t ''
结果是等价的。
编辑:最后一个变体,它是@andyras 和我的答案的混合体。您可以使用set timefmt
显式调用来timecolumn
将输入解析为时间。然后像传统的双精度数一样处理输出。我使用$0
,即当前样本的数量,来设置偏移值:
reset
set timefmt "%Y-%m-%d %H:%M:%S"
offset = 0
t0(x)=(offset=($0==0) ? x : offset, x - offset)
plot 'data.txt' u (t0(timecolumn(1))/3600.0):3 notitle w l