我正在做一个任务,我需要计算每天花费的时间,然后用条形图表示时间,所以对于这个任务,我使用python并能够获得每天花费的时间,并将其存储在列表“time_list”中,现在我不知道如何使用matplotlib函数绘制这个。
问题是,这个列表包含datetime.timedelta类的值。示例:
time_list
[datetime.timedelta(0, 23820), datetime.timedelta(0, 27480), datetime.timedelta(0, 28500), datetime.timedelta(0, 24180), datetime.timedelta(0, 27540), datetime.timedelta(0, 28920), datetime.timedelta(0, 28800), datetime.timedelta(0, 29100), datetime.timedelta(0, 29100), datetime.timedelta(0, 24480), datetime.timedelta(0, 27000)]
这些值的含义如下:
Total Time Spent on 2 is 6:37:00
Total Time Spent on 3 is 7:38:00
Total Time Spent on 4 is 7:55:00
Total Time Spent on 5 is 6:43:00
Total Time Spent on 8 is 7:39:00
Total Time Spent on 9 is 8:02:00
Total Time Spent on 10 is 8:00:00
Total Time Spent on 11 is 8:05:00
Total Time Spent on 12 is 8:05:00
Total Time Spent on 15 is 6:48:00
Total Time Spent on 16 is 7:30:00
3条答案
按热度按时间xytpbqjk1#
我不认为你可以直接在Matplotlib中绘制
timedelta
,但既然你已经有了秒数,你可以定义一个自定义的刻度格式,将秒转换为小时和分钟。然后,可以设置y轴的刻度格式化程序。
下面是一个使用
bar
的示例。kupeojn62#
虽然matplotlib原则上可以处理datetime对象,但条形图不能直接解释它们。因此,可以将任意日期添加到时间增量,并使用
matplotlib.dates.date2num()
转换为数字。然后使用一个DateFormatter
就可以实现漂亮的ticklabels。lfapxunr3#
当我想绘制
y axis
等于Timedelta64[ns]
类型的数据时,我遇到了类似的问题。我从这个博客中找到了解决这个问题的最简单的方法:solution。简而言之,只需将列的dtype
更改为.astype('timedelta64[m]')
。您可以更改为小时,分钟或秒为您的情况下,只需更改值在一个方括号。它将y
列的dtype更改为float64
,然后您可以轻松地绘制条形图或使用正常单位(而不是纳秒)绘图