【问题标题】:How plot datetime.time in matplotlib?如何在 matplotlib 中绘制 datetime.time?
【发布时间】:2014-07-15 11:34:56
【问题描述】:

我有两个要显示的数组:

x : [datetime.time(0, 17, 47, 782000), ...ect
y : [1712, 2002, ...ect

我正在尝试将 x 转换为 matplotlib 使用的格式,但它永远无法正常工作

x = [matplotlib.dates.date2num(i) for i in x]

但我得到了这个错误

AttributeError: 'datetime.time' object has no attribute 'toordinal'

我的问题与时间格式有关: 原始信息是这样的:

00:04:49.251

然后我转换它

datetime.datetime.strptime(string, "%H:%M:%S.%f").time()

所以类型是

<type 'datetime.time'>

【问题讨论】:

  • 似乎 maplotlib 想要一个日期时间而不是时间对象。

标签: python matplotlib


【解决方案1】:

这里的问题是您指定的 datetime.time 对象只有一天中的时间信息。正如Emanuele Paolini 在他们的评论中指出的那样,matplotlib 期望有datetime.datetime 对象除了时间之外还带有日期。

您可以进行转换:

import datetime

my_day = datetime.date(2014, 7, 15)
x_dt = [ datetime.datetime.combine(my_day, t) for t in x ]

现在您可以将x_dtplot 函数一起使用。

这种方法的缺点是您可能会在绘图的某处获得日期,但这可以通过更改标签设置来解决。

【讨论】:

  • 我认为 matplotlib 应该引入按 datetime.time 或其他“时钟时间”数据类型绘制的能力,就像它对 datetime 所做的那样。有些数据就是那种格式,现在你需要把它变成一个日期时间对象(添加一个随机且无用的日期组件,在你的用例中可能没有意义),然后用标签格式将其提取出来。
【解决方案2】:

我相信您正在使用 time 模块,因为它需要一个 datetime 对象。

对于错误,您可以使用类似的方法,(我 99% 确定这应该可以解决错误)

from datetime import datetime

dates.append(datetime.strptime(row[5], "%a, %d %b %Y %H:%M:%S %Z"))

【讨论】:

    猜你喜欢
    • 2012-01-12
    • 2019-02-16
    • 2016-02-09
    • 1970-01-01
    • 2011-06-23
    • 2021-10-02
    • 2021-03-06
    • 1970-01-01
    • 2011-01-19
    相关资源
    最近更新 更多