Как установить ось X каждые 10 лет - PullRequest
0 голосов
/ 30 марта 2020

У меня проблема с данными временных рядов графика. Я хочу показывать ось X каждые 10 лет, но могу показывать только каждый год. Любой может дать решение по этому поводу ??

fig,ax = plt.subplots(figsize=(11,4))
ax.plot(t, data, '0.1', label ='Data')
ax.plot(t, df_filt, 'C1', label='Lowpass Filter, cutoff=50 days')
ax.set_ylabel('Length of Day')
ax.set_xlabel('Time')
ax.legend()
ax.xaxis.set_major_locator(mdates.YearLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y'))
ax.grid(True)

enter image description here

1 Ответ

1 голос
/ 30 марта 2020

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)

enter image description here

РЕДАКТИРОВАТЬ, если вы хотите, чтобы даты начинались не кратно основанию, у вас есть два решения, о которых я могу подумать.

  • Правильное решение - следовать совету в этом ответе
  • Но более простым решением может быть установка ежегодных тиков, но отображать только один из каждого тика

код:

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

enter image description here

...