YearLocator
принимает аргумент base=
, чтобы указать период между тиками
пример:
import matplotlib.dates as mdates
t = mdates.drange(mdates.datetime.date(1900,1,1), mdates.datetime.date(2020,12,31), delta=mdates.datetime.timedelta(days=365))
data = np.random.random(size=t.shape)
fig, ax = plt.subplots()
ax.plot(t, data, '0.1', label ='Data')
ax.set_ylabel('Length of Day')
ax.set_xlabel('Time')
ax.legend()
ax.xaxis.set_major_locator(mdates.YearLocator(base=10))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y'))
ax.grid(True)
РЕДАКТИРОВАТЬ, если вы хотите, чтобы даты начинались не кратно основанию, у вас есть два решения, о которых я могу подумать.
- Правильное решение - следовать совету в этом ответе
- Но более простым решением может быть установка ежегодных тиков, но отображать только один из каждого тика
код:
ax.xaxis.set_major_locator(mdates.YearLocator(base=1))
ax.margins(x=0) # so that the axis starts at the minimum date
ax.set_xticks(ax.get_xticks()[::10]) # only show one every 10 years