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

Posted

技术标签:

【中文标题】Matplotlib - x 轴与日期时间之间的不均匀间隔【英文标题】:Matplotlib - uneven intervals between x-axis with datetime 【发布时间】: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 天间隔?谢谢。

【问题讨论】:

【参考方案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。

以上是关于Matplotlib - x 轴与日期时间之间的不均匀间隔的主要内容,如果未能解决你的问题,请参考以下文章

Matplotlib 绘图 x 轴(数据文件日期时间)

Matplotlib:在 x 轴上显示选定的日期标签

在Matplotlib中划分x和y标签

使用 matplotlib 在时间序列中自定义日期范围(x 轴)

是否可以使用 matplotlib 将 x 轴设置为仅显示开始日期和结束日期?

如何使用 Matplotlib 调整图形的 x 轴“日期”标签?