【问题标题】:Problem making gnuplot parse date and time like "2022-01-24 05:36:22"使 gnuplot 解析日期和时间出现问题,例如“2022-01-24 05:36:22”
【发布时间】:2022-01-28 08:23:06
【问题描述】:

看来我的 gnuplot 知识越来越生疏了;至少我看不出有什么问题:

我有一个看起来像这样的数据文件(实际文件有超过 50000 行,字段由 TAB 分隔):

#date-and-time(0)   1(1)    5(2)    9(3)    12(4)   13(5)   170(6)  174(7)  179(8)  180(9)  181(10) 182(11) 184(12) 194(13) 195(14) 197(15) 198(16) 199(17) 201(18) 202(19) 225(20) 226(21) 227(22) 228(23) 232(24) 233(25) 234(26) 241(27) 242(28) 245(29)
2022-01-24 05:36:22 130 100 100 100 95  100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
2022-01-24 06:06:22 130 100 100 100 95  100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
2022-01-24 06:36:22 130 100 100 100 95  100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
2022-01-24 07:06:22 130 100 100 100 95  100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100

gnuplot 会话如下所示:

Terminal type is now 'qt'
gnuplot> plot "attrlog.short" using 1:6 with linesp
Warning: empty x range [2022:2022], adjusting to [2001.78:2042.22]
Warning: empty y range [100:100], adjusting to [99:101]
gnuplot> set dataf sep tab
gnuplot> set form x "%F %T"
gnuplot> set timefmt "%F %T"
gnuplot> set xdata time
gnuplot> repl
2022-01-24 05:36:22 130 100 100 100 95  100 100 100 100 100 100 100 100 100 10...
attrlog.short:2:         warning: Bad time format in string
2022-01-24 05:36:22 130 100 100 100 95  100 100 100 100 100 100 100 100 100 10...
attrlog.short:2:         warning: Bad time format in string
2022-01-24 06:06:22 130 100 100 100 95  100 100 100 100 100 100 100 100 100 10...
attrlog.short:3:         warning: Bad time format in string
2022-01-24 06:06:22 130 100 100 100 95  100 100 100 100 100 100 100 100 100 10...
attrlog.short:3:         warning: Bad time format in string
2022-01-24 06:36:22 130 100 100 100 95  100 100 100 100 100 100 100 100 100 10...
attrlog.short:4:         warning: Bad time format in string
2022-01-24 06:36:22 130 100 100 100 95  100 100 100 100 100 100 100 100 100 10...
attrlog.short:4:         warning: Bad time format in string
2022-01-24 07:06:22 130 100 100 100 95  100 100 100 100 100 100 100 100 100 10...
attrlog.short:5:         warning: Bad time format in string
2022-01-24 07:06:22 130 100 100 100 95  100 100 100 100 100 100 100 100 100 10...
attrlog.short:5:         warning: Bad time format in string
Warning: empty x range [0:0], adjusting to [-1:1]
Warning: empty y range [95:95], adjusting to [94.05:95.95]
gnuplot> set form x "%Y-%m-%d %T"
gnuplot> set timefmt "%Y-%m-%d %T"
gnuplot> repl
2022-01-24 05:36:22 130 100 100 100 95  100 100 100 100 100 100 100 100 100 10...
attrlog.short:2:         warning: Bad time format in string
2022-01-24 06:06:22 130 100 100 100 95  100 100 100 100 100 100 100 100 100 10...
attrlog.short:3:         warning: Bad time format in string
2022-01-24 06:36:22 130 100 100 100 95  100 100 100 100 100 100 100 100 100 10...
attrlog.short:4:         warning: Bad time format in string
2022-01-24 07:06:22 130 100 100 100 95  100 100 100 100 100 100 100 100 100 10...
attrlog.short:5:         warning: Bad time format in string
Warning: empty x range [1.64298e+09:1.64298e+09], adjusting to [1.62655e+09:1.65941e+09]
Warning: empty y range [95:95], adjusting to [94.05:95.95]
gnuplot> 

最初我使用“%F”而不是“%Y-%m-%d”,但即使现在它也不起作用,我不明白为什么。 示例会话是使用 gnuplut 5.2 patchlevel 2 创建的,而最初问题是在 5.2 patchlevel 8 中发现的。

数据格式应该很明显:YYYY-MM-DD HH:MM:SS

【问题讨论】:

  • 检查 help time_specifiers: %F%T 仅用于输出,而不是您尝试的输入。输出:set format x '%F %T' 将起作用,但输入:set timefmt '%F %T' 根据文档将不起作用。
  • set timefmt "%Y-%m-%d %T" 将不起作用。这就是为什么你会得到"Bad time format in string"。将其更改为set timefmt "%Y-%m-%d %H:%M:%S"
  • 愚蠢的我:你是对的:我读过%F,但错过了%T

标签: datetime gnuplot strftime


【解决方案1】:

占位符%F(日期)和%T(时间)对于set timefmt无效。 因此,当使用这些命令时,事情应该会顺利进行:

set xdata time
set timefmt "%Y-%m-%d %H:%M:%S"

plot "attrlog.short" u 1:6 w lp

详情可见help time_specifiers:

%F%T 仅用于输出,而不是您尝试的输入。

  • 输出:set format x '%F %T' 可以,但是

  • 输入:set timefmt '%F %T'根据文档工作。 将其更改为set timefmt '%Y-%m-%d %H:%M:%S'

注意: 如果您想在数据示例中使用95 绘制列

  • 如果你的分隔符是空格(默认),你必须指定第 7 列。

  • 如果您明确将 TAB 作为分隔符(这是您稍后指定的)并且您的日期/时间中的空间是“正常”空间,那么第 6 列就可以了。

【讨论】:

  • @U.Windl 不确定,但很可能是在这种情况下,订单起了作用。这就是为什么我通常将所有命令放入以reset session 开头的脚本文件中,并通过load 'myScript.gp' 将此脚本文件加载到gnuplot 控制台中。有了这个,我从默认条件开始,可以通过文本编辑器轻松更改并再次重新加载修改后的脚本。否则,一些持久性设置可能会导致混乱和意外结果。
  • 通常,一旦情节符合我的期望,我也会这样做,但我在“构建”新情节时遇到了问题。保存似乎错误的命令对我来说似乎不是一个好主意。
  • 注意:编辑问题时,TAB 仍然存在于示例数据文件中,但如果您从显示中复制并粘贴,则不再存在。
猜你喜欢
  • 2011-06-02
  • 2015-07-30
  • 2016-07-23
  • 2010-09-18
  • 2016-04-22
  • 1970-01-01
  • 2019-09-05
  • 2015-10-31
  • 1970-01-01
相关资源
最近更新 更多