如何使用 matplotlib 将 timedelta 绘制为值

Sig*_*mun 5 python matplotlib timedelta

我试图绘制关于某些迭代值的持续时间(以秒为单位)。我通过减去两个日期时间值来计算持续时间值。然后,我想使用现有工具以非常简单的方式绘制这些结果。

我的代码如下,但它还不起作用:

#!/usr/bin/env python

import datetime
import matplotlib.pyplot as plt
from numpy import arange

it = arange(10)
durations = [datetime.timedelta(hours=h+30) for h in it]

plt.plot(it, durations)

plt.show()
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

TypeError: float() argument must be a string or a number
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过使用 datetime 而不是 timedelta 来使其工作,但我的目标是以小时为单位(大约 40 小时)绘制持续时间,因此渲染效果不佳。

kab*_*nus 5

那是因为没有定义的 timedelta 到 float 的转换。您可以使用:

durations = [datetime.timedelta(hours=h+30).total_seconds()/3600.0 for h in it]
Run Code Online (Sandbox Code Playgroud)

将持续时间转换为浮点小时数。看怎么格式化如果您想在绘图上使用美好的小时符号,请刻度标签的。您可以将小时 (float) 转换为格式良好的小时字符串。

(编辑:改.total_seconds.total_seconds()