在matplotlib中绘制一天中的时间与日期的关系

发布于 2021-01-29 14:11:00

我想以特定的几种方式在x轴上绘制日期,在y轴上绘制一天中的时间,然后绘制线条图或间隔(浮动条)图。

这样的答案有帮助

但是我与那个情节有一些区别,我无法使其正常工作。我实际上是在y轴上绘制日期和时间的图,所以当我只需要一天的时间时,它在y轴上压缩了几个月的时间戳。该示例在注释中声称:“
yaxis的基准日期可以是任何东西,因为信息在时间上”,但是我不明白他是如何“扔掉”基准日期信息的。

无论如何,我的需求是:

  1. 我想选择y轴的24小时制(00:00到24:00)或am / pm样式时间,该轴的刻度看起来像3:00 pm、11:00am等。我想是用FuncFormatter完成的。

  2. 对于间隔(时间范围),我不想使用误差线-线太细了。我想使用一个(浮动的)条形/柱形图。

我的数据是格式为‘2010-12-20 05:00:00’的日期时间字符串

谢谢你的帮助。

关注者
0
被浏览
263
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我认为您对matplotlib究竟如何在后台处理时间和日期感到有些困惑。

    matplotlib中的所有日期时间都表示为简单浮点数。1天对应于1.0的差,日期是自1900年以来的天数(如果我没有记错的话,无论如何)。

    因此,为了只绘制给定日期的时间,您需要使用% 1

    我将使用点,但是您可以轻松使用条形图。考虑使用bottom,如果你使用关键字参数plt.bar,使杆的底部将在您的时间间隔的开始时间开始(请记住第二个参数是
    高度 了吧,不是其顶部的y值)。

    例如:

    import matplotlib.pyplot as plt
    import matplotlib as mpl
    import numpy as np
    import datetime as dt
    
    # Make a series of events 1 day apart
    x = mpl.dates.drange(dt.datetime(2009,10,1), 
                         dt.datetime(2010,1,15), 
                         dt.timedelta(days=1))
    # Vary the datetimes so that they occur at random times
    # Remember, 1.0 is equivalent to 1 day in this case...
    x += np.random.random(x.size)
    
    # We can extract the time by using a modulo 1, and adding an arbitrary base date
    times = x % 1 + int(x[0]) # (The int is so the y-axis starts at midnight...)
    
    # I'm just plotting points here, but you could just as easily use a bar.
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.plot_date(x, times, 'ro')
    ax.yaxis_date()
    fig.autofmt_xdate()
    
    plt.show()
    

    时间与日期

    希望能有所帮助!



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看