我为每月的时间序列绘制一些线图,从 1999年,代码如下:
import pandas as pd
import matplotlib.pyplot as plt
matplotlib.style.use('ggplot')
url = ('https://raw.githubusercontent.com/mini-kep/parser-rosstat-kep/'
'master/data/processed/latest/dfm.csv')
dfm = pd.read_csv(url, converters={0: pd.to_datetime}, index_col=0)
ax = dfm.iloc[:,3:5].plot()
这时,我有主要和次要刻度线和x刻度线标签。所需的更改是更改主要刻度的位置,以便它们每5年从2000年开始到2020年结束。我可以使用下面的代码(following this)做到这一点,但是我要付出的代价是刻度标签消失了。我无法用plt.xticks
带回来。另一个小错误是我的滴答声现在在年终,而不是所需的开始年。
major_ticks = pd.date_range('2000', '2020', freq='5Y')
ax.set_xticks(major_ticks)
# below dows not help to add back major tick labels
# plt.xticks(label=[t.year for t in major_ticks])
minor_ticks = pd.date_range('1998', '2020', freq='Y')
ax.set_xticks(minor_ticks, minor=True)
任何建议都值得赞赏。
更新:
我的问题中的代码紧跟this suggestion for changing the position of major ticks。
但是,它被标记为duplicate of the question, that explains tick label formatting。它具有有用的线索,因此有效的最终代码如下:
# x_compat=True - an important part
ax = dfm.iloc[:,3:5].plot(x_compat=True)
# set minor ticks
minor_ticks = pd.date_range('1998', '2020', freq='YS')
ax.set_xticks(minor_ticks, minor=True)
# set major ticks
major_ticks = pd.date_range('2000', '2020', freq='5YS')
ax.xaxis.set_ticks(major_ticks, minor=False)
ax.xaxis.set_major_formatter(dates.DateFormatter('%Y'))
plt.gcf().autofmt_xdate(rotation=0, ha="center")