使gnuplot的x轴从0开始,而不是从第一个日期开始

我正在绘制一些[日期,值]格式的数据(cpu使用时间),并希望xtics从0或1而不是第一个日期开始.

因此,10小时应该看起来像:0:01:00,0:02:00,..,0:10:00 9:23:00的内容……(因为数据中的第一天是第9天晚上11点).

我当前的日期时间设置:

set xdata time
set timefmt "%Y-%m-%d %H:%M:%S"
set xtics format "%d:%H:%M" font ",25"

编辑:如果有一种方法可以计算x轴上从0开始的小时数,而没有日期信息也很棒.无论哪种方式.我只想从0开始计算,使“时间”非常明确.

最佳答案 我无法使用set xdata时间,因为对于输出只有月中的某一天可用,这在[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
点赞