Введение
Этот практикум направлен на то, чтобы дать представление о том, как использовать различные локаторы и форматировщики отметок времени в Matplotlib. В этом руководстве показано, как использовать эти функции для настройки оси X графика с данными, основанными на времени.
Советы по работе с ВМ
После запуска ВМ нажмите в верхнем левом углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Импорт необходимых библиотек
Начнем с импорта необходимых библиотек для этого руководства. Будем использовать matplotlib и numpy.
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.dates import (
FR, MO, MONTHLY, SA, SU, TH, TU, WE, AutoDateFormatter, AutoDateLocator,
ConciseDateFormatter, DateFormatter, DayLocator, HourLocator,
MicrosecondLocator, MinuteLocator, MonthLocator, RRuleLocator, SecondLocator,
WeekdayLocator, YearLocator, rrulewrapper)
import matplotlib.ticker as ticker
Определение локаторов и форматтеров
Определяем различные локаторы и форматтеры, которые будем использовать. В этом примере используются следующие локаторы:
AutoDateLocator(maxticks=8)YearLocator(month=4)MonthLocator(bymonth=[4, 8, 12])DayLocator(interval=180)WeekdayLocator(byweekday=SU, interval=4)HourLocator(byhour=range(0, 24, 6))MinuteLocator(interval=15)SecondLocator(bysecond=(0, 30))MicrosecondLocator(interval=1000)RRuleLocator(rrulewrapper(freq=MONTHLY, byweekday=(MO, TU, WE, TH, FR), bysetpos=-1))
И следующие форматтеры:
AutoDateFormatter(ax.xaxis.get_major_locator())ConciseDateFormatter(ax.xaxis.get_major_locator())DateFormatter("%b %Y")
locators = [
('AutoDateLocator(maxticks=8)', '2003-02-01', '%Y-%m'),
('YearLocator(month=4)', '2003-02-01', '%Y-%m'),
('MonthLocator(bymonth=[4, 8, 12])', '2003-02-01', '%Y-%m'),
('DayLocator(interval=180)', '2003-02-01', '%Y-%m-%d'),
('WeekdayLocator(byweekday=SU, interval=4)', '2000-07-01', '%a %Y-%m-%d'),
('HourLocator(byhour=range(0, 24, 6))', '2000-02-04', '%H h'),
('MinuteLocator(interval=15)', '2000-02-01 02:00', '%H:%M'),
('SecondLocator(bysecond=(0, 30))', '2000-02-01 00:02', '%H:%M:%S'),
('MicrosecondLocator(interval=1000)', '2000-02-01 00:00:00.005', '%S.%f'),
('RRuleLocator(rrulewrapper(freq=MONTHLY, byweekday=(MO, TU, WE, TH, FR), '
'bysetpos=-1))', '2000-07-01', '%Y-%m-%d'),
]
formatters = [
'AutoDateFormatter(ax.xaxis.get_major_locator())',
'ConciseDateFormatter(ax.xaxis.get_major_locator())',
'DateFormatter("%b %Y")',
]
Построение графиков
Теперь мы можем создавать наши графики. Создадим два подграфика, чтобы отдельно продемонстрировать локаторы и форматтеры. Для каждого локатора и форматтера мы строим график, который показывает, как он влияет на ось X. Для этого мы используем функцию plot_axis. Эта функция настраивает общие параметры для каждой оси, такие как шипы, параметры делений и пределы. Она также настраивает локатор и форматтер для оси X.
def plot_axis(ax, locator=None, xmax='2002-02-01', fmt=None, formatter=None):
ax.spines[['left', 'right', 'top']].set_visible(False)
ax.yaxis.set_major_locator(ticker.NullLocator())
ax.tick_params(which='major', width=1.00, length=5)
ax.tick_params(which='minor', width=0.75, length=2.5)
ax.set_xlim(np.datetime64('2000-02-01'), np.datetime64(xmax))
if locator:
ax.xaxis.set_major_locator(eval(locator))
ax.xaxis.set_major_formatter(DateFormatter(fmt))
else:
ax.xaxis.set_major_formatter(eval(formatter))
ax.text(0.0, 0.2, locator or formatter, transform=ax.transAxes,
fontsize=14, fontname='Monospace', color='tab:blue')
fig, axs = plt.subplots(len(locators), 1, figsize=(8, len(locators) *.8),
layout='constrained')
fig.suptitle('Date Locators')
for ax, (locator, xmax, fmt) in zip(axs, locators):
plot_axis(ax, locator, xmax, fmt)
fig, axs = plt.subplots(len(formatters), 1, figsize=(8, len(formatters) *.8),
layout='constrained')
fig.suptitle('Date Formatters')
for ax, fmt in zip(axs, formatters):
plot_axis(ax, formatter=fmt)
Отображение графиков
Наконец, мы можем отобразить графики с использованием функции plt.show().
plt.show()
Резюме
В этом руководстве мы узнали, как использовать различные локаторы и форматтеры делений по датам в Matplotlib. Мы построили несколько графиков, которые демонстрировали, как каждый локатор и форматтер влияет на ось X графика с данными, основанными на времени. Эти знания могут быть полезны при создании визуализаций временных рядов данных.