2013-09-16 78 views
3

我绘制了一些[日期,值]格式化数据(随时间推移使用cpu),并希望xtics从0或1开始,而不是第一次日期。使gnuplot的x轴从0开始,而不是从第一个日期开始

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

我的当前日期时间设置:

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

编辑:如果有一种方法来算了算时间从0 x轴上的开始,而不天信息这将会是真棒太。无论哪种方式。我只想从0开始计数,以使“花费的时间”非常清晰。

+1

我周围的各种设置的位出场,但我无法得到它的工作。使用'%d'时出现的问题是'一个月中的一天',但不是天数。所以最小值始终是'1',并且您的输出将在'0'位置以'01:...'开始。我不知道如何绕过这一点。 – Christoph

+0

那么,只要x轴可能有总小时数,我会很高兴甚至会忽略这一天。我将编辑我的答案以添加该信息。 – CornSmith

回答

2

我无法得到它与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 '' 

第一列与外部工具提取。

结果是:

enter image description here

这里是另一种变型,它采用了更舒适的数据格式,使用逗号作为分离器,并且所述第一列与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 
+0

谢谢,这些脚本都很棒。 – CornSmith

+0

你能解释一下伪列$ 0在这种情况下做什么? – CornSmith

+2

@CornSmith查看编辑答案中的最后一个脚本。 “$ 0”是当前行的索引,“$ 0 == 0”在第一行为“true”。 – Christoph

1

这不是一个完全的答案,但足够接近,我张贴它是这样的。

我有办法,你可以在时间零(由this answer启发,我的一个老问题)开始的时间文件:

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 

和输出:

enter image description here

Ť他的策略有一个问题,一旦数据超过31天日期计数器重置。

我找不出如何获取xtics格式来操纵数据列。

+0

这也是一个非常好的答案。我将使用这个数据跨越3天以上,其余为克里斯托弗的数据。我希望我可以将两者都标为正确。对于大于31天的数据,我会使用克里斯托弗的答案而不是几个小时。 – CornSmith

相关问题