如何在matplotlib中绘制datetime.time?

Yan*_*eun 7 python matplotlib

我有两个要显示的数组:

x : [datetime.time(0, 17, 47, 782000), ...ect
y : [1712, 2002, ...ect
Run Code Online (Sandbox Code Playgroud)

我正在尝试将x转换为matplotlib使用的格式,但它从未尝试过

x = [matplotlib.dates.date2num(i) for i in x]
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个错误

AttributeError: 'datetime.time' object has no attribute 'toordinal'
Run Code Online (Sandbox Code Playgroud)

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

00:04:49.251
Run Code Online (Sandbox Code Playgroud)

然后我转换它

datetime.datetime.strptime(string, "%H:%M:%S.%f").time()
Run Code Online (Sandbox Code Playgroud)

所以类型是

<type 'datetime.time'>
Run Code Online (Sandbox Code Playgroud)

DrV*_*DrV 7

这里的问题是您指定的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 ]
Run Code Online (Sandbox Code Playgroud)

现在您可以使用x_dt该plot功能。

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

  • 我认为 matplotlib 应该引入通过 datetime.time 或其他“时钟时间”数据类型进行绘图的功能,就像它对 datetime 所做的那样。有些数据就是这种格式,现在您需要将其转换为日期时间对象(添加一个随机且无用的日期组件,该组件在您的用例中可能没有意义),然后使用标签格式将其提取出来。 (3认同)

Mad*_*ddy 1

我相信您正在使用时间模块,因为它需要一个日期时间对象。

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

from datetime import datetime

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