【问题标题】:How do I display dates when plotting in matplotlib.pyplot?在 matplotlib.pyplot 中绘图时如何显示日期?
【发布时间】:2014-02-26 17:27:21
【问题描述】:

我有这个 python 代码来显示一段时间内的一些数字:

import matplotlib.pyplot as plt
import datetime
import numpy as np

x = np.array([datetime.datetime(2013, 9, i).strftime("%Y-%m-%d") for i in range(1,5)], 
            dtype='datetime64')
y = np.array([1,-1,7,-3])
plt.plot(x,y)
plt.axhline(linewidth=4, color='r')
plt.show()

生成的图表在 x 轴上有数字 0.0 到 3.0:

显示日期而不是这些数字的最简单方法是什么?最好采用 %b %d 格式。

【问题讨论】:

    标签: python numpy matplotlib


    【解决方案1】:

    According to efiring,matplotlib 不支持 NumPy datetime64 对象(至少目前不支持)。因此,将x 转换为 Python datetime.datetime 对象:

    x = x.astype(DT.datetime)
    

    接下来,您可以像这样指定 x 轴刻度线格式化程序:

    xfmt = mdates.DateFormatter('%b %d')
    ax.xaxis.set_major_formatter(xfmt)
    

    import matplotlib.pyplot as plt
    import matplotlib.dates as mdates
    import datetime as DT
    import numpy as np
    
    x = np.array([DT.datetime(2013, 9, i).strftime("%Y-%m-%d") for i in range(1,5)], 
                dtype='datetime64')
    x = x.astype(DT.datetime)
    y = np.array([1,-1,7,-3])
    fig, ax = plt.subplots()
    ax.plot(x, y)
    ax.axhline(linewidth=4, color='r')
    xfmt = mdates.DateFormatter('%b %d')
    ax.xaxis.set_major_formatter(xfmt)
    plt.show()
    

    【讨论】:

    • 实际上我只使用了 NumPy datetime64 对象,因为我认为它会有所帮助,所以只需 x = np.array([datetime.datetime(2013, 9, i) for i in range(1,5) ]) 做到了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 2020-09-22
    • 2014-04-14
    相关资源
    最近更新 更多