python gnuplot读取csv文件以在读取顺序或行顺序中在x轴上绘制时间

时间:2014-08-14 13:04:08

标签: python csv gnuplot

我有以下格式的csv文件,包含超过3k行和20列

21:46:12    82748   5356864
22:47:33    82748   5352768
23:47:43    82748   5356864
00:47:53    82748   5356864
01:48:03    82748   5352768
02:48:13    82748   5356864
03:48:23    82748   5352768
04:48:33    82748   5356864

当我试图绘制图形时,时间从04到21进行排序,其中我的要求是以相同的行顺序绘制,即21到04(我没有订购日期条目)。是否有任何机制来维持绘制情节的相同顺序。

1 个答案:

答案 0 :(得分:1)

编辑:请参见底部的特定时间解决方案

通过这个答案,你需要对你的具体细节进行一些研究,但解决方案基本上就是这个。

我建议您使用计数系统,每当您增加一天时存储在某个变量中,每当第一列中的值小于之前的值时,就会发生这种情况。 22:00:00之后是01:00:00。请考虑以下数据:

0 1
1 2
2 3
3 4
0 5
1 6
2 7
3 8

循环每4个单位发生一次(在你的情况下是24小时)。按原样绘制,看起来像这样:

enter image description here

现在,使用以下代码,您可以跟踪"跳跃"在x值:

count=0
x0=1
plot "data" u ($1 < x0 ? (x0=$1, count=count+1, $1+4.*count) : \
(x0=$1, $1+4.*count) ):2 w l

如果当前x值低于前一个值,则上面的代码会将count增加1。然后x值转移到x + 4.*count。四是我的周期宽度(24小时为你)。如下所示:

enter image description here

特定时间的解决方案:

同样的原则,适用于OP的问题:

set xdata time
set timefmt "%H:%M:%S"
set format x "%d - %H:%M:%S"
set xtics 6*3600
count = 0
x0 = 0
plot "data" u (timecolumn(1) < x0 ? (x0=timecolumn(1), count=count+1, \
$1+24*3600*count) : (x0=timecolumn(1), timecolumn(1)+24*3600*count) ):3 w l

enter image description here