Введение
Это пошаговая лабораторная работа, которая демонстрирует, как обрабатывать точность дат и эпоху в Matplotlib. Matplotlib может работать с объектами .datetime и numpy.datetime64 с использованием конвертера единиц, который распознает эти даты и преобразует их в числа с плавающей точкой. До Matplotlib 3.3 по умолчанию для этого преобразования возвращался float, представляющий количество дней с "0000-12-31T00:00:00". Начиная с Matplotlib 3.3 по умолчанию используется количество дней с "1970-01-01T00:00:00". Это позволяет более высокую точность для современных дат.
Советы по работе с ВМ
После завершения запуска ВМ щелкните в верхнем левом углу, чтобы переключиться на вкладку Notebook, чтобы получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится. Валидация операций не может быть автоматизирована из-за ограничений в Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Импортировать необходимые пакеты
Первым шагом является импорт необходимых пакетов, в том числе datetime, matplotlib.pyplot и numpy.
import datetime
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.dates as mdates
Установить эпоху по старому умолчанию
Следующим шагом является установка эпоху по старому умолчанию, то есть количество дней с "0000-12-31T00:00:00". Это делается с использованием метода mdates.set_epoch.
mdates.set_epoch('0000-12-31T00:00:00')
Преобразовать datetime в дату Matplotlib
Теперь, когда эпоху установлено, мы можем преобразовать объект datetime в дату Matplotlib с использованием функции mdates.date2num.
date1 = datetime.datetime(2000, 1, 1, 0, 10, 0, 12, tzinfo=datetime.timezone.utc)
mdate1 = mdates.date2num(date1)
Возврат по кругу даты
Затем мы можем выполнить обратное преобразование даты с использованием функции mdates.num2date, чтобы убедиться, что преобразование точное.
date2 = mdates.num2date(mdate1)
Установить эпоху по новому умолчанию
Для использования современных дат с точностью до микросекунд нам нужно установить эпоху по новому умолчанию, то есть количество дней с "1970-01-01T00:00:00".
mdates.set_epoch('1970-01-01T00:00:00')
Преобразовать datetime в дату Matplotlib с новой эпохой
Теперь, когда эпоху установлено по новому умолчанию, мы можем преобразовать объект datetime в дату Matplotlib с использованием функции mdates.date2num.
date1 = datetime.datetime(2020, 1, 1, 0, 10, 0, 12, tzinfo=datetime.timezone.utc)
mdate1 = mdates.date2num(date1)
Возврат по кругу даты с новой эпохой
Затем мы можем выполнить обратное преобразование даты с использованием функции mdates.num2date, чтобы убедиться, что преобразование точное.
date2 = mdates.num2date(mdate1)
Преобразовать numpy.datetime64 в дату Matplotlib
Объекты numpy.datetime64 имеют точность до микросекунд для гораздо большей временной области, чем объекты .datetime. Однако в настоящее время время Matplotlib преобразуется только обратно в объекты datetime, которые имеют разрешение до микросекунд и годы, которые охватывают только период с 0000 по 9999.
date1 = np.datetime64('2000-01-01T00:10:00.000012')
mdate1 = mdates.date2num(date1)
Построение графиков
Этот шаг демонстрирует, как эпох влияет на построение графиков. При старом стандартном значении эпох времени округлялись в ходе внутреннего преобразования date2num, что приводило к скачкам в данных.
mdates.set_epoch('0000-12-31T00:00:00')
x = np.arange('2000-01-01T00:00:00.0', '2000-01-01T00:00:00.000100', dtype='datetime64[us]')
xold = np.array([mdates.num2date(mdates.date2num(d)) for d in x])
y = np.arange(0, len(x))
fig, ax = plt.subplots(layout='constrained')
ax.plot(xold, y)
ax.set_title('Epoch: ' + mdates.get_epoch())
ax.xaxis.set_tick_params(rotation=40)
plt.show()
Для дат, построенных с использованием более современной эпохи, график гладкий:
mdates.set_epoch('1970-01-01T00:00:00')
fig, ax = plt.subplots(layout='constrained')
ax.plot(x, y)
ax.set_title('Epoch: ' + mdates.get_epoch())
ax.xaxis.set_tick_params(rotation=40)
plt.show()
Резюме
Этот практикум демонстрирует, как обрабатывать точность дат и эпох в Matplotlib. Мы можем установить эпоху по старому или новому умолчанию с использованием метода mdates.set_epoch. Затем мы можем преобразовать объекты datetime или numpy.datetime64 в даты Matplotlib с использованием функции mdates.date2num, а также выполнить обратное преобразование дат с использованием функции mdates.num2date, чтобы убедиться, что преобразование точное. Мы также можем построить графики с разными эпхами, чтобы наблюдать за различиями в графиках.