代码之家  ›  专栏  ›  技术社区  ›  Prateek Dewan

在matplotlib中以折线图的形式打印日期时间对象列表

  •  2
  • Prateek Dewan  · 技术社区  · 8 年前

    我有一个datetime对象的排序列表,如下所示:

    X = [datetime.date(2017, 1, 14), datetime.date(2017, 1, 14), datetime.date(2017, 1, 16), datetime.date(2017, 1, 16), datetime.date(2017, 1, 18), datetime.date(2017, 1, 22), datetime.date(2017, 1, 24), datetime.date(2017, 1, 24), datetime.date(2017, 1, 29), datetime.date(2017, 2, 4), datetime.date(2017, 2, 10), datetime.date(2017, 2, 22), datetime.date(2017, 2, 28), datetime.date(2017, 3, 8), datetime.date(2017, 3, 28), datetime.date(2017, 4, 17), datetime.date(2017, 4, 20), datetime.date(2017, 4, 20), datetime.date(2017, 5, 16), datetime.date(2017, 5, 26), datetime.date(2017, 6, 12), datetime.date(2017, 6, 23), datetime.date(2017, 6, 28), datetime.date(2017, 7, 28), datetime.date(2017, 8, 14), datetime.date(2017, 8, 29), datetime.date(2017, 8, 29), datetime.date(2017, 9, 26), datetime.date(2017, 10, 4), datetime.date(2017, 10, 5), datetime.date(2017, 10, 8), datetime.date(2017, 11, 20), datetime.date(2017, 12, 2), datetime.date(2017, 12, 11), datetime.date(2017, 12, 11), datetime.date(2018, 2, 14), datetime.date(2018, 2, 16), datetime.date(2018, 3, 2), datetime.date(2018, 3, 5), datetime.date(2018, 3, 28)]
    

    目标是绘制一个折线图,其中X轴为日期,Y轴为每个日期在列表中出现的次数。我知道获取折线图的最蹩脚的方法是从X中删除重复项,然后生成另一个列表Y,其中包含X中每个datetime对象的频率,并执行

    plt.plot(X,Y)
    

    但是有没有一种更聪明/更像蟒蛇的方法呢?

    我已经读过了 Plotting time in Python with Matplotlib ,但这没有帮助。

    1 回复  |  直到 8 年前
        1
  •  2
  •   ImportanceOfBeingErnest    8 年前

    matplotlib通常不提供聚合数据的方法。它毕竟是一个绘图库。

    相反,您可以依赖内置的python选项,或者使用其他软件包,比如numpy或pandas。

    例如,使用 numpy.unique :

    import numpy as np
    import matplotlib.pyplot as plt
    import datetime
    
    Z = [datetime.date(2017, 1, 14), datetime.date(2017, 1, 14), ...,
        ..., datetime.date(2018, 3, 28)] # data from question
    
    X,Y = np.unique(Z, return_counts=True)
    
    plt.plot(X,Y)
    
    plt.show()