Python matplotlib时间与日期

Python matplotlib时间与日期,python,matplotlib,Python,Matplotlib,我正在使用psycopg2从数据库中提取数据,以获取记录故障的日期和时间。我想把它画出来,时间在y轴上,日期在x轴上。点图似乎是实现这一点的理想方法 这是代码的一部分,我从中获取数据,并使用zip制作我想要绘制的两个对象 cur.execute("SELECT date, time FROM querytimes where server = (%s) AND date > CURRENT_DATE - (%s) AND fail = 'Yes'", (serv

我正在使用psycopg2从数据库中提取数据,以获取记录故障的日期和时间。我想把它画出来,时间在y轴上,日期在x轴上。点图似乎是实现这一点的理想方法

这是代码的一部分,我从中获取数据,并使用zip制作我想要绘制的两个对象

    cur.execute("SELECT date, time FROM querytimes where server = (%s) AND date > CURRENT_DATE - (%s) AND fail = 'Yes'", (server,days,))

    # retrieve the whole result set
    data = cur.fetchall()
    # close connection
    cur.close()
    conn.close()
    # Test
    date, time = zip(*data)
这些是生成的“日期”和“时间”对象

(datetime.date(2013,1,10),datetime.date(2013,1,10),datetime.date(2013,1,10),datetime.date(2013,1,10),datetime.date(2013,1,10),datetime.date(2013,1,10),datetime.date(2013,1,10),datetime.date(2013,1,10),datetime.datetime.date(2013,1,10),datetime.datetime.date(2013,1,10),datetime.date(2013,1,10),datetime.date(2013,1,10),datetime.date(2013,1,10),datetime.date(2013,1,10),datetime.date(2013,1,11),datetime.date(2013,1,12),datetime.date(2013,1,12),datetime.date(2013,1,13))

(datetime.time(15,25,3),datetime.time(15,26,3),datetime.time(15,27,4),datetime.time(15,28,3),datetime.time(15,29,3),datetime.time(15,30,4),datetime.time(15,31,3),datetime.time(15,32,4),datetime.time(15,33,3),datetime.time(15,34,3),datetime.time(15,35,3),datetime.time(15,36,3),datetime.time.time(15,37,3),datetime.time(15,38,3),datetime.time(15,39,3),datetime.time(15,40,3),datetime.time(0,20,4),datetime.time(6,19,3),datetime.time(10,50,3),datetime.time(2,19,3))

我在绘图时遇到问题。据我所知,这些需要在matplotlib之前先转换为浮点数才能理解数据

尝试使用date2num,这对“date”对象有效,但不确定如何对“time”对象有效


谢谢

您可以轻松使用

得到

替代方法:将日期时间作为索引 将datetime对象作为索引,而不仅仅是date对象有时允许更大的灵活性,所以我个人认为我可以用这种方式表示此类数据。您可以先将日期和时间对象组合起来

datetimes = []
for date, time in zip(dates, times):
    datetimes.append(datetime.datetime.combine(date, time))
构建您的时间序列

ts = pd.Series(1, index=datetimes)
(1表示当时有一个故障)

现在,您可以在此类数据上创建另一个有用的视图,使您能够查看每天的数量

ts.groupby(lambda x : x.date()).sum().plot(rot=30, style='x-', kind='bar')

ts.groupby(lambda x : x.date()).sum().plot(rot=30, style='x-', kind='bar')