Matplotlib - x轴为日期时间且间隔不均匀的情况

5

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

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

enter image description here

请注意两个日期不按照典型的7天周期递增的情况。即使延长时间段,问题仍然存在。
x = pd.date_range('2018-11-03', '2019-03-20')
plt.plot(x, np.arange(len(x)))
plt.xticks(rotation=45)

enter image description here

我该如何覆盖此行为,以便在我的图表上使用标准的7天间隔?谢谢。
1个回答

10
你可以使用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 会自动调整最佳间距。 - GardenQuant
我也很惊讶你一开始得到了不均匀的刻度标签。在Python 3.5.4(Spyder IDE 2.3.8)下运行你的脚本,会得到一个刻度标签均匀分布的图像(14天间隔)。 - Sheldon
目前正在使用Anaconda,所以我将尝试进行全新安装。再次感谢您的帮助。 - GardenQuant
3
这种行为应该在Matplotlib 3.1(约为2月)得到改进。刻度将会落在每个月的第一天或第十五天。请注意,AutoDateLocator有一个关键字参数:'interval_multiples=True',它曾经默认为False。因此,无论日期在月份中的何处(如1月1日、1月15日、1月29日、2月12日),刻度都会每14天出现一次。这已经发生了改变,但如果你更喜欢旧的行为,仍然可以将其设置为False。 - Jody Klymak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接