5

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

所以 10 个小时应该看起来像:0:01:00, 0:02:00, .., 0:10:00insead of 9:23:00 ...(因为数据中的第一天是晚上 11 点的第 9 天)。

我当前的日期时间设置:

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

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

4

2 回答 2

2

set xdata time无法让它[1:31]与. 总小时数也是如此,因为该值被限制为,因此超过的数字被回绕。01[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
于 2013-09-16T19:58:17.847 回答
1

这不是一个完整的答案,但足够接近以至于我将其发布为这样。

我有一种方法可以在零时间启动时间文件(受我的一个老问题的这个答案的启发):

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

first = 0
offset = 0
# returns data offset by first value
t0(x)=(offset=(first==0)?x:offset,first=1,x-offset)

plot 'data.dat' u (t0(timecolumn(1))):3 notitle

以下是一些示例数据

2013-09-16 00:14:00 1
2013-09-26 00:15:00 3
2013-10-04 00:16:00 2
2013-10-19 00:17:00 4

和输出:

在此处输入图像描述

这种策略的问题是,一旦数据超过 31 天,日期计数器就会重置。

我不知道如何获得 xtics 格式来操作数据列。

于 2013-09-16T19:52:38.490 回答