【问题标题】:Plot by datenum按日期绘制
【发布时间】:2019-05-18 01:26:27
【问题描述】:

我正在尝试按日期时间值绘制图表。

考虑这个示例 CSV (streetnoise.csv):

datetime,noise level
2018-12-03 03:31:12.592,10
2018-12-03 03:31:15.832,10
2018-12-03 03:31:17.062,11
2018-12-03 03:31:19.292,12
2018-12-03 03:31:23.532,11
2018-12-03 03:31:25.762,10
2018-12-03 03:31:26.002,23
2018-12-03 03:31:28.242,10
2018-12-03 03:31:34.492,10
2018-12-03 03:31:34.722,9

所以这只是将街道噪音测量值存储为元组。我想从中绘制一个情节,使用 Octave:

# Load the data
pkg load io
csv_data = csv2cell("streetnoise.csv")

# Parse the datetimes
datevalues = datenum(csv_data(2:end,1), "yyyy-mm-dd HH:MM:SS.FFF")
seconds = (datevalues - datevalues(1)) * 24 * 60 * 60

# Get noise levels
noiseLevels = [csv_data{2:end,2}]

# Plot by seconds since start
h = figure(1)
plot(seconds, noiseLevels)
title("Levels per seconds")
xlim([min(seconds) max(seconds)])

# Plot by datenum
i = figure(2)
plot(datevalues, noiseLevels)
title("Levels per datevalues")

第一个图的内容是可读的:

但是,这并不是很容易理解,因为读者必须知道何时开始测量并计算时间。

第二个数字只是空的:

如何使用 datenum 值进行绘图?之后我想尝试使用 datenum 解析进行标记,但我什至没有走那么远。

当我添加xlim([min(datevalues) max(datevalues)]) 时,我只能看到 y 轴。

【问题讨论】:

  • 正如 matzeri 解释的那样,这是 OpenGL 工具包的一个已知问题,原因是浮点(单)精度数据类型。除了使用 gnuplot 之外,还有另一种解决方法:从您的日期中减去 1.January 2018,以便剩余日期适合单身人士
  • 看看我在这里解决同样问题的答案:stackoverflow.com/a/53242735/4183191

标签: datetime octave


【解决方案1】:

图表适用于

graphics_toolkit("gnuplot")

默认的“fltk”图形工具包使用数字作为“单一”,它没有足够的数字来 区分日期之间的秒数差异。 Gnuplot使用“double”,它可以区分

【讨论】:

  • 我很遗憾地说,但自 Octave 4.0 以来,fltk 不是默认工具包,其中 Qt 被选为默认工具包。但我仍在使用 cli 和 fltk
  • @Andy 总是在这里使用 cli 和 gnuplot。 Fltk 在我的系统上有太多问题
猜你喜欢
  • 2019-12-26
  • 1970-01-01
  • 2021-09-30
  • 2017-10-17
  • 2018-05-23
  • 1970-01-01
  • 2018-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多