为什么在matplotlib.plot_date中将月的第一天自动绘制为刻度?

时间:2019-01-04 00:41:23

标签: python matplotlib

我有一个以日期为字符串和日期为datetime64 [ns]的地理数据框。我正在使用matplotlib 3.0.2。如其他帖子和问题中所述,我尝试使用plt.cla()plt.clear()plt.clf()清除数据,但是无论如何,该数据绘制的似乎是主轴和副轴格式化而没有任何提示-假设在plot_date中,月的第一天是“主要”轴。 This is my graph (edited for clarity)。似乎是由于3.0.2(来自2.1.0)中的新更新引起的,很难弄清楚到底是什么引起了

我看到了这个question/answer,这似乎与我的问题有关,但在这种情况下,希望使用子日期等,但我感到困惑,因为这并不是一个一致的问题我在其他类似的数据集中。

Dataframe:
          Date    var_name
106 2018-04-03  0.79132056
216 2018-04-09  0.75112718
546 2018-06-12  0.73359674
646 2018-07-03  0.72600174
706 2018-07-23  0.71263647



figsize=(14,10)
fig, ax = plt.subplots(figsize=figsize)
data['Date'] = pd.to_datetime(data['Date'])

plt.xticks(rotation=30, ha='right')
plt.grid(color='k', lw=0.2)

plt.plot_date(data.Date, data.var_name)

更新

感谢Jody和ImportanceOfBeingErnest指出这是由于matplotlib版本3.0.2中kwargs的更改所引起的,该更改已在3.1中修复,其中interval_multiples=True现在是默认值,用于绘制每月的第一天其他壁虱。 @ImportanceOfBeingErnest是评论者。

PR link

最相关的matplotlib问题#12925。 Matplot库问题#9978也很重要

1 个答案:

答案 0 :(得分:0)

感谢@TheImportanceOfBeingErnest和@JodyKlymak提出的建议使用AutoDateLocatorMonthLocator的意见。以下代码片段最终成为了我的解决方法。 Final figure

具有更多控制权的方法:

figsize=(14,10)
fig, ax = plt.subplots(figsize=figsize)
data['Date'] = pd.to_datetime(data['Date'])

plt.xticks(rotation=30, ha='right')
plt.grid(color='k', lw=0.2)

months = matplotlib.dates.MonthLocator()
ax.xaxis.set_major_locator(months)
year_month = matplotlib.dates.DateFormatter('%Y-%m')
ax.xaxis.set_major_formatter(year_month)

plt.plot_date(data.Date, data.var_name)

在保留旧行为的同时仍使用AutoDateLocator的方法

locator = matplotlib.dates.AutoDateLocator(interval_multiples=False)
ax.xaxis.set_major_locator(locator)