熊猫图中的日期时间索引

时间:2020-11-05 14:18:34

标签: python pandas datetime matplotlib indexing

我正在尝试使用Pandas和matplotlib绘制时间序列图,并在x轴上标记了工作日(星期一)。但是,我遇到了一个奇怪的行为,我相信是由于pandas.Series.plot函数中对日期时间索引的处理(错误?)引起的。

摘自pandas.Series.plot的文档(也在pandas.DataFrame.plot中):

  • use_index 布尔,默认为True。 使用索引作为x轴的刻度。

但是,尽管索引是DatetimeIndex类型的,但看起来却不被认为是索引(可能以字符串形式处理?)。

考虑以下代码,尝试使用三种不同的方法创建相同的图:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl


idx = pd.date_range(start='2020-10-02', periods=35)
Y = np.cumsum(np.random.uniform(0, 10, idx.size))

ts = pd.Series(Y, idx)

fig, axes = plt.subplots(figsize=(10, 6), nrows=3, constrained_layout=True)

ts.plot(kind='bar', ax=axes[0]) # use_index=True is used by defualt
axes[0].xaxis.set_major_locator(mpl.dates.WeekdayLocator(interval=1, byweekday=mpl.dates.MONDAY))

ts.plot(kind='bar', ax=axes[1])
axes[1].xaxis.set_major_locator(mpl.dates.WeekdayLocator(interval=1, byweekday=mpl.dates.MONDAY))
axes[1].xaxis.set_major_formatter(mpl.dates.DateFormatter('%Y-%m-%d'))

axes[2].bar(ts.index, ts.values)
axes[2].xaxis.set_major_locator(mpl.dates.WeekdayLocator(interval=1, byweekday=mpl.dates.MONDAY))
axes[2].xaxis.set_major_formatter(mpl.dates.DateFormatter('%Y-%m-%d'))

结果是 enter image description here

我希望所有三个情节大致相同。而且,它们不包括x轴的刻度(应标记星期一的日期)。如我所见,DatetimeIndexpandas.Series.plot中并未真正被正确识别。第一个绘图上的日期是正确的,但是打勾的日期不是星期一。更烦人的是,如果在刻度线(第二个图)上应用了新格式,即使日期错误了!

bar(ts.index, ts.values)的行为是正确的,并按预期将星期一标记为

0 个答案:

没有答案