Matplotlib - x 轴与日期时间之间的不均匀间隔

Gar*_*ant 4 python datetime matplotlib pandas

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

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

在此处输入图片说明

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

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

在此处输入图片说明

如何覆盖此行为以在我的情节上具有标准的 7 天间隔?谢谢你。

She*_*don 7

您可以使用 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))
Run Code Online (Sandbox Code Playgroud)

上面的脚本返回下图:

在此处输入图片说明

  • 这种行为应该在 Matplotlib 3.1 (~Feb) 中得到改进。刻度将落在第一个或第十五个。请注意,AutoDateLocator 有一个 kwarg:`interval_multiples=True`,它曾经默认为 False。因此,滴答每 14 天下降一次,无论它们在当月的哪个月(1 月 1 日、1 月 15 日、1 月 29 日、2 月 12 日)。这已更改,但如果您希望恢复旧行为,您仍然可以将其设置为 False。 (3认同)