【问题标题】:matplotlib time vs datematplotlib 时间与日期
【发布时间】:2013-01-14 20:01:56
【问题描述】:

我正在使用 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.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.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(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 并且适用于“日期”对象,但不确定如何为“时间”对象执行此操作。

谢谢

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    您可以使用Pandas 轻松实现此目的。

    import pandas as pd
    ts = pd.Series(times, index=dates)
    ts.plot(rot=30, style='x-')
    

    得到类似的东西

    替代方法:日期时间作为索引

    将日期时间对象作为索引,而不仅仅是日期对象有时可以提供更大的灵活性,因此我个人会以这种方式表示此类数据。您可以通过首先组合您的日期和时间对象来做到这一点

    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')
    

    【讨论】:

      猜你喜欢
      • 2018-06-29
      • 2021-12-29
      • 2017-12-10
      • 2021-05-10
      • 1970-01-01
      • 2019-12-14
      • 2010-12-21
      • 2019-06-01
      • 2010-10-22
      相关资源
      最近更新 更多