【问题标题】:Matplotlib - uneven intervals between x-axis with datetimeMatplotlib - x 轴与日期时间之间的不均匀间隔
【发布时间】:2019-06-01 03:00:00
【问题描述】:

我目前遇到一个问题,当我的 x 轴使用 DatetimeIndex 时,我的绘图上的刻度之间的间隔似乎有不均匀的间隔。代码如下:

x = pd.date_range('2018-11-03', '2018-12-30')
plt.plot(x, np.arange(len(x)))
plt.xticks(rotation=45)

请注意日期不按典型的 7 天周期递增的两种情况。即使延长时间段,问题仍然存在:

x = pd.date_range('2018-11-03', '2019-03-20')
plt.plot(x, np.arange(len(x)))
plt.xticks(rotation=45)

如何覆盖此行为以在我的地块上设置标准的 7 天间隔?谢谢。

【问题讨论】:

    标签: python pandas datetime matplotlib


    【解决方案1】:

    您可以使用 matplotlib 的ticker 模块来自定义刻度位置:

    import matplotlib.pyplot as plt
    import pandas as pd
    import matplotlib.ticker as ticker
    
    x = pd.date_range('2018-11-03', '2019-03-20')
    plt.plot(x, np.arange(len(x)))
    plt.xticks(rotation=45)
    ax=plt.gca()
    ax.xaxis.set_major_locator(ticker.MultipleLocator(7))
    

    以上脚本返回如下图片:

    【讨论】:

    • 非常感谢。做这项工作。我很好奇为什么首先会发生这种行为?我记得matplotlib 会自动调整最佳空间。
    • 我也很惊讶你一开始就有不均匀的刻度标签。在 Python 3.5.4 (Spyder IDE 2.3.8) 下运行脚本会产生一个带有均匀间隔刻度标签的图形(14 天间隔)。
    • 目前正在使用 anaconda,所以我将尝试全新安装。再次感谢您的帮助。
    • 这种行为应该在 Matplotlib 3.1 (~Feb) 中得到改进。滴答声将落在第一个或第十五个。请注意,AutoDateLocator 有一个 kwarg:interval_multiples=True,过去默认为 False。因此,刻度每 14 天下降一次,无论它们在哪个月(1 月 1 日、1 月 15 日、1 月 29 日、2 月 12 日)。这已更改,但如果您希望恢复旧行为,您仍然可以设置为 False。
    猜你喜欢
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 2022-08-03
    • 2020-12-07
    相关资源
    最近更新 更多