【问题标题】:python gnuplot read csv file to plot time in x-axis in the read order or row orderpython gnuplot读取csv文件以读取顺序或行顺序在x轴上绘制时间
【发布时间】:2014-08-14 13:04:08
【问题描述】:

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

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?您已标记为 python 和 csv 但我没有看到任何证据。正如@Christoph 所建议的那样,最好的办法是为您的时间使用不同的输出格式,包括日期。在我们看到你的 python 脚本(假设你有一个)之前,我们无法帮助你。

标签: python csv gnuplot


【解决方案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 小时)。按原样绘制,如下所示:

现在,您可以使用以下代码跟踪 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 加一。然后 x 值转移到x + 4.*count。四是我的周期宽度(对你来说是 24 小时)。如下所示:

特定时间的解决方案:

同样的原则,适用于 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

【讨论】:

  • 你用OP提供的时间数据试过了吗?
  • 谢谢,我会试试这个并用结果更新链接
猜你喜欢
  • 1970-01-01
  • 2022-01-13
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
相关资源
最近更新 更多