Spec-Zone.ru › Matplotlib

matplotlib.dates

Диаграмма наследования matplotlib.dates

Matplotlib предоставляет широкие возможности для построения графиков с датами, опираясь на возможности модуля Python datetime и дополнительного модуля dateutil.

По умолчанию Matplotlib использует механизм единиц измерения, описанный в units, для преобразования объектов datetime.datetime и numpy.datetime64 при построении по оси x или y. Пользователю не нужно ничего делать, чтобы даты форматировались, но для дат часто требуются строгие правила форматирования, поэтому этот модуль предоставляет множество локаторов и форматировщиков делений. Простой пример с использованием numpy.datetime64:

import numpy as np

times = np.arange(np.datetime64('2001-01-02'),
                  np.datetime64('2002-02-03'), np.timedelta64(75, 'm'))
y = np.random.randn(len(times))

fig, ax = plt.subplots()
ax.plot(times, y)

См. также

  • Подписи делений с датами
  • Форматирование делений с датами с помощью ConciseDateFormatter
  • Демонстрация преобразования дат

Формат дат в Matplotlib

Matplotlib представляет даты числами с плавающей точкой, указывающими количество дней с начала эпохи по умолчанию — 1970-01-01 UTC; например, 1970-01-01, 06:00 соответствует числу с плавающей точкой 0.25. Для работы форматировщиков и локаторов требуются объекты datetime.datetime, поэтому можно представлять только даты в диапазоне от года 0001 до 9999. Точность до микросекунд достижима примерно в пределах 70 лет по обе стороны от эпохи, а для остального допустимого диапазона дат (с 0001 по 9999 год) — до 20 микросекунд. При необходимости эпоху можно изменить во время импорта с помощью dates.set_epoch или rcParams["date.epoch"] (по умолчанию: '1970-01-01T00:00:00'), указав другую дату; см. обсуждение в разделе Точность дат и эпохи.

Примечание

До Matplotlib 3.3 эпохой было 0000-12-31, что снижало точность до микросекунд для современных дат, а также приводило к тому, что значение 0 по умолчанию для предела оси не соответствовало допустимой дате и времени. В версии 3.3 эпоха была изменена, как описано выше. Чтобы преобразовать старые порядковые числа с плавающей точкой в новую эпоху, можно выполнить следующее:

new_ordinal = old_ordinal + mdates.date2num(np.datetime64('0000-12-31'))

Для преобразования объектов datetime в даты Matplotlib и обратно предусмотрен ряд вспомогательных функций:

datestr2num

Преобразовать строку с датой в datenum с помощью dateutil.parser.parse.

date2num

Преобразовать объекты datetime в даты Matplotlib.

num2date

Преобразовать даты Matplotlib в объекты datetime.

num2timedelta

Преобразовать количество дней в объект timedelta.

drange

Вернуть последовательность равномерно распределённых дат Matplotlib.

set_epoch

Задать эпоху (начало отсчёта дат) для вычислений с датами и временем.

get_epoch

Получить эпоху, используемую в dates.

Примечание

Как и Python в datetime.datetime, Matplotlib использует григорианский календарь для всех преобразований между датами и числами с плавающей точкой. Эта практика не является универсальной, и различия календарей могут приводить к расхождениям между количеством дней с 0001-01-01, которое вычисляют Python и Matplotlib, и результатами других программ и баз данных. Например, Военно-морская обсерватория США использует календарь, в котором переход от юлианского к григорианскому произошёл в октябре 1582 года. Поэтому её калькулятор показывает, что между 0001-01-01 и 2006-04-01 прошло 732403 дня, тогда как при использовании григорианского календаря через модуль datetime получаем:

In [1]: date(2006, 4, 1).toordinal() - date(1, 1, 1).toordinal()
Out[1]: 732401

Все преобразователи дат, локаторы и форматировщики Matplotlib учитывают часовые пояса. Если часовой пояс не указан явно, используется rcParams["timezone"] (по умолчанию: 'UTC'), заданный в виде строки. Чтобы использовать другой часовой пояс, передайте именованный аргумент tz функции num2date любому создаваемому вами локатору или форматировщику делений с датами. Это может быть экземпляр datetime.tzinfo или строка с названием часового пояса, которую можно разобрать с помощью gettz.

Этот модуль предоставляет широкий набор специализированных и универсальных локаторов и форматировщиков делений с датами. Общие сведения о локаторах и форматировщиках делений см. в matplotlib.ticker. Они описаны ниже.

Модуль dateutil предоставляет дополнительный код для работы с делениями дат, упрощая размещение делений для дат любого типа. См. примеры ниже.

Локаторы делений с датами

Большинство локаторов делений с датами могут размещать одно или несколько делений. Например:

# import constants for the days of the week
from matplotlib.dates import MO, TU, WE, TH, FR, SA, SU

# tick on Mondays every week
loc = WeekdayLocator(byweekday=MO, tz=tz)

# tick on Mondays and Saturdays
loc = WeekdayLocator(byweekday=(MO, SA))

Кроме того, большинство конструкторов принимают аргумент interval:

# tick on Mondays every second week
loc = WeekdayLocator(byweekday=MO, interval=2)

Локатор rrule позволяет задавать деления дат практически произвольным образом:

# tick every 5th easter
rule = rrulewrapper(YEARLY, byeaster=1, interval=5)
loc = RRuleLocator(rule)

Доступны следующие локаторы делений с датами:

  • MicrosecondLocator: размещает деления с шагом в микросекунды.
  • SecondLocator: размещает деления с шагом в секунды.
  • MinuteLocator: размещает деления с шагом в минуты.
  • HourLocator: размещает деления с шагом в часы.
  • DayLocator: размещает деления в указанные дни месяца.
  • WeekdayLocator: размещает деления по дням недели, например MO, TU.
  • MonthLocator: размещает деления по месяцам, например 7 для июля.
  • YearLocator: размещает деления по годам, кратным base.
  • RRuleLocator: размещает деления с помощью rrulewrapper. rrulewrapper — это простая оболочка над dateutil dateutil.rrule, которая позволяет задавать почти произвольные правила размещения делений с датами. См. Пример rrule.
  • AutoDateLocator: при автоматическом масштабировании этот класс выбирает подходящий DateLocator (например, RRuleLocator), чтобы задать пределы области просмотра и положения делений. Если вызвать его с interval_multiples=True, деления будут выровнены по удобным кратным интервала. Например, при интервале в 4 часа в качестве делений будут выбраны часы 0, 4, 8 и т. д. По умолчанию такое поведение не гарантируется.

Форматировщики дат

Доступны следующие форматировщики дат:

  • AutoDateFormatter: пытается определить подходящий формат. Наиболее полезен при использовании с AutoDateLocator.
  • ConciseDateFormatter: также пытается определить подходящий формат и сделать его как можно компактнее, сохранив при этом полную информацию о дате. Наиболее полезен при использовании с AutoDateLocator.
  • DateFormatter: использует строки формата strftime.
classmatplotlib.dates.AutoDateFormatter(locator, tz=None, defaultfmt='%Y-%m-%d', *, usetex=None)[исходный код]

Базовый класс: Formatter

Formatter, который пытается определить подходящий формат. Наиболее полезен при использовании с AutoDateLocator.

AutoDateFormatter содержит словарь .scale, сопоставляющий масштабы делений (интервал в днях между соседними основными делениями) строкам формата; по умолчанию этот словарь имеет вид

self.scaled = {
    DAYS_PER_YEAR: rcParams['date.autoformatter.year'],
    DAYS_PER_MONTH: rcParams['date.autoformatter.month'],
    1: rcParams['date.autoformatter.day'],
    1 / HOURS_PER_DAY: rcParams['date.autoformatter.hour'],
    1 / MINUTES_PER_DAY: rcParams['date.autoformatter.minute'],
    1 / SEC_PER_DAY: rcParams['date.autoformatter.second'],
    1 / MUSECONDS_PER_DAY: rcParams['date.autoformatter.microsecond'],
}

Форматировщик использует строку формата, соответствующую наименьшему ключу словаря, который больше текущего масштаба или равен ему. Записи словаря можно настраивать:

locator = AutoDateLocator()
formatter = AutoDateFormatter(locator)
formatter.scaled[1/(24*60)] = '%M:%S' # only show min and sec

Вместо строк формата можно также использовать пользовательские вызываемые объекты. В следующем примере показано, как использовать пользовательскую функцию форматирования, чтобы удалять конечные нули у десятичных секунд и добавлять дату к первой подписи деления:

def my_format_function(x, pos=None):
    x = matplotlib.dates.num2date(x)
    if pos == 0:
        fmt = '%D %H:%M:%S.%f'
    else:
        fmt = '%H:%M:%S.%f'
    label = x.strftime(fmt)
    label = label.rstrip("0")
    label = label.rstrip(".")
    return label

formatter.scaled[1/(24*60)] = my_format_function

Автоматически форматирует подписи дат.

Параметры:
locatorticker.Locator

Локатор, используемый этой осью.

tzstr или tzinfo, по умолчанию: rcParams["timezone"] (по умолчанию: 'UTC')

Часовой пояс делений. Если tz задан как строка, он передаётся в dateutil.tz.

defaultfmtstr

Формат по умолчанию, используемый, если ни одно из значений в self.scaled не больше единицы, возвращённой locator._get_unit().

usetexbool, по умолчанию: rcParams["text.usetex"] (по умолчанию: False)

Включает или отключает использование математического режима TeX при отображении результатов форматировщика. Если какие-либо записи в self.scaled заданы как функции, включение или отключение математического режима TeX должна обеспечивать сама пользовательская функция.

classmatplotlib.dates.AutoDateLocator(tz=None, minticks=5, maxticks=None, interval_multiples=True)[исходный код]

Базовый класс: DateLocator

При автоматическом масштабировании этот класс выбирает подходящий DateLocator, чтобы задать пределы области просмотра и положения делений.

Атрибуты:
intervalddict

Соответствие между частотой делений и допустимыми множителями для этой частоты. По умолчанию:

self.intervald = {
    YEARLY  : [1, 2, 4, 5, 10, 20, 40, 50, 100, 200, 400, 500,
               1000, 2000, 4000, 5000, 10000],
    MONTHLY : [1, 2, 3, 4, 6],
    DAILY   : [1, 2, 3, 7, 14, 21],
    HOURLY  : [1, 2, 3, 4, 6, 12],
    MINUTELY: [1, 5, 10, 15, 30],
    SECONDLY: [1, 5, 10, 15, 30],
    MICROSECONDLY: [1, 2, 5, 10, 20, 50, 100, 200, 500,
                    1000, 2000, 5000, 10000, 20000, 50000,
                    100000, 200000, 500000, 1000000],
}

ключи определены в dateutil.rrule.

Интервал используется для указания множителей, подходящих для частоты делений. Например, при ежедневных делениях разумно использовать интервал в 7 дней, а для минут и секунд подходят значения 15 или 30.

При настройке следует изменять только значения существующих ключей. Не следует добавлять или удалять записи.

Пример принудительного размещения делений каждые 3 часа:

locator = AutoDateLocator()
locator.intervald[HOURLY] = [3]  # only show every 3 hours
Параметры:
tzstr или tzinfo, по умолчанию: rcParams["timezone"] (по умолчанию: 'UTC')

Часовой пояс делений. Если tz задан как строка, он передаётся в dateutil.tz.

minticksint

Желаемое минимальное количество делений; определяет, будут ли деления годичными, месячными и т. д.

maxticksint

Желаемое максимальное количество делений; определяет интервал между делениями (через одно, через каждые 3 и т. д.). Для более точной настройки можно передать словарь, сопоставляющий отдельные константы частоты rrule (YEARLY, MONTHLY и т. д.) с собственным максимальным количеством делений. Это позволяет поддерживать подходящее число делений для формата, выбранного в AutoDateFormatter. Для частот, не указанных в этом словаре, используется значение по умолчанию.

interval_multiplesbool, по умолчанию: True

Следует ли выбирать деления кратно интервалу, размещая их в более удобных положениях. Например, при размещении почасовых делений с интервалом в 6 часов деления будут принудительно установлены на отметках 0, 6, 12 и 18 часов.

get_locator(dmin, dmax)[исходный код]

Выбрать подходящий локатор на основе расстояния.

nonsingular(vmin, vmax)[исходный код]

С учётом предложенных верхней и нижней границ скорректировать диапазон, если он слишком близок к вырожденному (то есть диапазону около 0).

tick_values(vmin, vmax)[исходный код]

Вернуть значения найденных делений для заданных vmin и vmax.

Примечание

Чтобы получить положения делений, автоматически определив значения vmin и vmax для связанного axis, просто вызовите экземпляр Locator:

>>> print(type(loc))
<type 'Locator'>
>>> print(loc())
[1, 2, 3, 4]
classmatplotlib.dates.ConciseDateConverter(formats=None, zero_formats=None, offset_formats=None, show_offset=True, *, interval_multiples=True)[исходный код]

Базовый класс: DateConverter

axisinfo(unit, axis)[исходный код]

Вернуть AxisInfo для unit.

unit — это экземпляр tzinfo или None. Аргумент axis является обязательным, но не используется.

classmatplotlib.dates.ConciseDateFormatter(locator, tz=None, formats=None, offset_formats=None, zero_formats=None, show_offset=True, *, usetex=None)[исходный код]

Базовые классы: Formatter

Formatter, который пытается определить наилучший формат для даты и сделать его как можно компактнее, сохраняя при этом полноту. Особенно полезен при использовании с AutoDateLocator:

>>> locator = AutoDateLocator()
>>> formatter = ConciseDateFormatter(locator)
Параметры:
locatorticker.Locator

Локатор, используемый этой осью.

tzstr или tzinfo, по умолчанию: rcParams["timezone"] (значение по умолчанию: 'UTC')

Часовой пояс делений, передаваемый в dates.num2date.

formatsсписок из 6 строк, необязательно

Строки формата для 6 уровней подписей делений: обычно это годы, месяцы, дни, часы, минуты и секунды. В строках используются те же коды формата, что и в strftime. Значение по умолчанию: ['%Y', '%b', '%d', '%H:%M', '%H:%M', '%S.%f']

zero_formatsсписок из 6 строк, необязательно

Строки формата для подписей делений, которые являются «нулевыми» для данного уровня делений. Например, если большинство делений соответствуют месяцам, деления около 1 января 2005 года будут подписаны как «Dec», «2005», «Feb». Значение по умолчанию: ['', '%Y', '%b', '%b-%d', '%H:%M', '%H:%M']

offset_formatsсписок из 6 строк, необязательно

Строки формата для 6 уровней, применяемые к строке «смещения» справа от оси x или над осью y. Вместе с подписями делений они должны полностью задавать дату. Значение по умолчанию:

['', '%Y', '%Y-%b', '%Y-%b-%d', '%Y-%b-%d', '%Y-%b-%d %H:%M']
show_offsetbool, по умолчанию: True

Показывать ли смещение.

usetexbool, по умолчанию: rcParams["text.usetex"] (значение по умолчанию: False)

Включить или отключить использование математического режима TeX для отображения результатов форматтера.

Примеры

См. Форматирование делений дат с помощью ConciseDateFormatter

(Source code, 2x.png, png)

Автоматически форматирует подписи дат. Сначала для создания исходной строки используется формат по умолчанию, затем удаляются избыточные элементы.

format_data_short(value)[исходный код]

Возвращает краткую строку, представляющую значение деления.

По умолчанию возвращает длинное значение, не зависящее от положения.

format_ticks(values)[исходный код]

Возвращает подписи всех делений за один вызов.

get_offset()[исходный код]
classmatplotlib.dates.DateConverter(*, interval_multiples=True)[исходный код]

Базовые классы: ConversionInterface

Конвертер для данных типа datetime.date и datetime.datetime или для данных даты и времени, представленных в виде, в который их преобразует date2num.

Тег «unit» для таких данных — None или экземпляр tzinfo.

axisinfo(unit, axis)[исходный код]

Возвращает AxisInfo для unit.

unit — это экземпляр tzinfo или None. Аргумент axis обязателен, но не используется.

staticconvert(value, unit, axis)[исходный код]

Если value не является числом или последовательностью чисел, преобразует его с помощью date2num.

Аргументы unit и axis не используются.

staticdefault_units(x, axis)[исходный код]

Возвращает экземпляр tzinfo для x или его первого элемента либо None

classmatplotlib.dates.DateFormatter(fmt, tz=None, *, usetex=None)[исходный код]

Базовые классы: Formatter

Форматирует деление (в днях с начала эпохи) с помощью строки формата strftime.

Параметры:
fmtstr

Строка формата strftime

tzstr или tzinfo, по умолчанию: rcParams["timezone"] (значение по умолчанию: 'UTC')

Часовой пояс делений. Если tz — строка, она передаётся в dateutil.tz.

usetexbool, по умолчанию: rcParams["text.usetex"] (значение по умолчанию: False)

Включить или отключить использование математического режима TeX для отображения результатов форматтера.

set_tzinfo(tz)[исходный код]
classmatplotlib.dates.DateLocator(tz=None)[исходный код]

Базовые классы: Locator

Определяет расположение делений при построении графиков дат.

Этот класс служит базовым для других локаторов и не предназначен для самостоятельного использования.

Параметры:
tzstr или tzinfo, по умолчанию: rcParams["timezone"] (значение по умолчанию: 'UTC')

Часовой пояс делений. Если tz — строка, она передаётся в dateutil.tz.

datalim_to_dt()[исходный код]

Преобразует интервал данных оси в объекты datetime.

hms0d={'byhour': 0, 'byminute': 0, 'bysecond': 0}
nonsingular(vmin, vmax)[исходный код]

Получив предложенные верхнюю и нижнюю границы, корректирует диапазон, если он слишком близок к вырожденному (то есть имеет ширину около 0).

set_tzinfo(tz)[исходный код]

Задаёт сведения о часовом поясе.

Параметры:
tzstr или tzinfo, по умолчанию: rcParams["timezone"] (значение по умолчанию: 'UTC')

Часовой пояс делений. Если tz — строка, она передаётся в dateutil.tz.

viewlim_to_dt()[исходный код]

Преобразует интервал отображения в объекты datetime.

classmatplotlib.dates.DayLocator(bymonthday=None, interval=1, tz=None)[исходный код]

Базовые классы: RRuleLocator

Размещает деления в указанные дни месяца. Например, 1, 15, 30.

Параметры:
bymonthdayint или список значений int, по умолчанию: все дни

Деления будут размещаться в каждый день, указанный в bymonthday. По умолчанию используется bymonthday=range(1, 32), то есть каждый день месяца.

intervalint, по умолчанию: 1

Интервал между итерациями. Например, если interval=2, отмечается каждое второе вхождение.

tzstr или tzinfo, по умолчанию: rcParams["timezone"] (значение по умолчанию: 'UTC')

Часовой пояс делений. Если tz — строка, она передаётся в dateutil.tz.

classmatplotlib.dates.HourLocator(byhour=None, interval=1, tz=None)[исходный код]

Базовые классы: RRuleLocator

Размещает деления в указанные часы.

Параметры:
byhourint или список значений int, по умолчанию: все часы

Деления будут размещаться в каждый час, указанный в byhour. По умолчанию используется byhour=range(24), то есть каждый час.

intervalint, по умолчанию: 1

Интервал между итерациями. Например, если interval=2, отмечается каждое второе вхождение.

tzstr или tzinfo, по умолчанию: rcParams["timezone"] (значение по умолчанию: 'UTC')

Часовой пояс делений. Если tz — строка, она передаётся в dateutil.tz.

classmatplotlib.dates.MicrosecondLocator(interval=1, tz=None)[исходный код]

Базовые классы: DateLocator

Размещает деления с регулярными интервалами в одну или несколько микросекунд.

Примечание

По умолчанию Matplotlib использует представление времени с плавающей точкой в днях с начала эпохи, поэтому построение графиков данных с микросекундным разрешением времени плохо работает для дат, удалённых от начала эпохи примерно на 70 лет (проверьте с помощью get_epoch).

Для графиков времени с разрешением менее микросекунды настоятельно рекомендуется использовать секунды с плавающей точкой, а не представление времени, подобное datetime.

Если вам необходимо использовать datetime.datetime() или аналогичный тип и при этом нужна микросекундная точность, измените начало отсчёта времени с помощью dates.set_epoch, задав значение ближе к датам, отображаемым на графике. См. Точность дат и эпохи.

Параметры:
intervalint, по умолчанию: 1

Интервал между итерациями. Например, если interval=2, отмечается каждое второе вхождение.

tzstr или tzinfo, по умолчанию: rcParams["timezone"] (значение по умолчанию: 'UTC')

Часовой пояс делений. Если tz — строка, она передаётся в dateutil.tz.

set_axis(axis)[исходный код]
tick_values(vmin, vmax)[исходный код]

Возвращает значения найденных делений для заданных vmin и vmax.

Примечание

Чтобы получить расположение делений с автоматически заданными значениями vmin и vmax для соответствующего axis, просто вызовите экземпляр Locator:

>>> print(type(loc))
<type 'Locator'>
>>> print(loc())
[1, 2, 3, 4]
classmatplotlib.dates.MinuteLocator(byminute=None, interval=1, tz=None)[исходный код]

Базовые классы: RRuleLocator

Размещает деления в указанные минуты.

Параметры:
byminuteint или список значений int, по умолчанию: все минуты

Деления будут размещаться в каждую минуту, указанную в byminute. По умолчанию используется byminute=range(60), то есть каждую минуту.

intervalint, по умолчанию: 1

Интервал между итерациями. Например, если interval=2, отмечается каждое второе вхождение.

tzstr или tzinfo, по умолчанию: rcParams["timezone"] (значение по умолчанию: 'UTC')

Часовой пояс делений. Если tz — строка, она передаётся в dateutil.tz.

classmatplotlib.dates.MonthLocator(bymonth=None, bymonthday=1, interval=1, tz=None)[исходный код]

Базовые классы: RRuleLocator

Создает деления для каждого месяца, например, 1, 3, 12.

Параметры:
bymonthint или list of int, по умолчанию: все месяцы

Деления будут размещены в каждом месяце из bymonth. По умолчанию используется range(1, 13), то есть каждый месяц.

bymonthdayint, по умолчанию: 1

День, в который следует разместить деления.

intervalint, по умолчанию: 1

Интервал между итерациями. Например, если interval=2, отмечается каждое второе вхождение.

tzstr или tzinfo, по умолчанию: rcParams["timezone"] (значение по умолчанию: 'UTC')

Часовой пояс делений. Если это строка, tz передается в dateutil.tz.

classmatplotlib.dates.RRuleLocator(o, tz=None)[исходный код]

Базовые классы: DateLocator

Параметры:
tzstr или tzinfo, по умолчанию: rcParams["timezone"] (значение по умолчанию: 'UTC')

Часовой пояс делений. Если это строка, tz передается в dateutil.tz.

staticget_unit_generic(freq)[исходный код]
tick_values(vmin, vmax)[исходный код]

Возвращает значения найденных делений для заданных vmin и vmax.

Примечание

Чтобы получить расположение делений со значениями vmin и vmax, автоматически определенными для соответствующего axis, просто вызовите экземпляр Locator:

>>> print(type(loc))
<type 'Locator'>
>>> print(loc())
[1, 2, 3, 4]
classmatplotlib.dates.SecondLocator(bysecond=None, interval=1, tz=None)[исходный код]

Базовые классы: RRuleLocator

Создает деления для каждого вхождения секунды.

Параметры:
bysecondint или list of int, по умолчанию: все секунды

Деления будут размещены для каждой секунды из bysecond. По умолчанию используется bysecond = range(60), то есть каждая секунда.

intervalint, по умолчанию: 1

Интервал между итерациями. Например, если interval=2, отмечается каждое второе вхождение.

tzstr или tzinfo, по умолчанию: rcParams["timezone"] (значение по умолчанию: 'UTC')

Часовой пояс делений. Если это строка, tz передается в dateutil.tz.

classmatplotlib.dates.WeekdayLocator(byweekday=1, interval=1, tz=None)[исходный код]

Базовые классы: RRuleLocator

Создает деления для каждого вхождения дня недели.

Параметры:
byweekdayint или list of int, по умолчанию: все дни

Деления будут размещены для каждого дня недели из byweekday. По умолчанию используется каждый день.

Элементами byweekday должны быть MO, TU, WE, TH, FR, SA, SU — константы из dateutil.rrule, импортированные в пространство имен matplotlib.dates.

intervalint, по умолчанию: 1

Интервал между итерациями. Например, если interval=2, отмечается каждое второе вхождение.

tzstr или tzinfo, по умолчанию: rcParams["timezone"] (значение по умолчанию: 'UTC')

Часовой пояс делений. Если это строка, tz передается в dateutil.tz.

classmatplotlib.dates.YearLocator(base=1, month=1, day=1, tz=None)[исходный код]

Базовые классы: RRuleLocator

Создает деления в заданный день каждого года, кратного base.

Примеры:

# Tick every year on Jan 1st
locator = YearLocator()

# Tick every 5 years on July 4th
locator = YearLocator(5, month=7, day=4)
Параметры:
baseint, по умолчанию: 1

Отмечать деления каждые base лет.

monthint, по умолчанию: 1

Месяц, в который следует разместить деления, начиная с 1. По умолчанию — январь.

dayint, по умолчанию: 1

День, в который следует разместить деления.

tzstr или tzinfo, по умолчанию: rcParams["timezone"] (значение по умолчанию: 'UTC')

Часовой пояс делений. Если это строка, tz передается в dateutil.tz.

matplotlib.dates.date2num(d)[исходный код]

Преобразует объекты datetime в даты Matplotlib.

Параметры:
ddatetime.datetime или numpy.datetime64 или последовательности таких объектов
Возвращает:
float или последовательность float

Количество дней с начала эпохи. См. get_epoch, чтобы узнать эпоху. Ее можно изменить с помощью rcParams["date.epoch"] (значение по умолчанию: '1970-01-01T00:00:00') или set_epoch. Если эпоха равна "1970-01-01T00:00:00" (значение по умолчанию), полдень 1 января 1970 года ("1970-01-01T12:00:00") соответствует 0.5.

Примечания

Предполагается григорианский календарь; это не общепринятая практика. Подробности см. в строке документации модуля.

matplotlib.dates.datestr2num(d, default=None)[исходный код]

Преобразует строку с датой в числовое представление даты с помощью dateutil.parser.parse.

Параметры:
dstr или последовательность str

Даты для преобразования.

defaultdatetime.datetime, необязательный

Дата по умолчанию, используемая, если в d отсутствуют поля.

matplotlib.dates.drange(dstart, dend, delta)[исходный код]

Возвращает последовательность равномерно распределенных дат Matplotlib.

Даты начинаются с dstart и доходят до dend, не включая ее. Интервал между ними задается параметром delta.

Параметры:
dstart, denddatetime

Границы дат.

deltadatetime.timedelta

Интервал между датами.

Возвращает:
numpy.array

Список значений float, представляющих даты Matplotlib.

matplotlib.dates.get_epoch()[исходный код]

Возвращает эпоху, используемую dates.

Возвращает:
epochstr

Строка, задающая эпоху (должна разбираться с помощью numpy.datetime64).

matplotlib.dates.num2date(x, tz=None)[исходный код]

Преобразует даты Matplotlib в объекты datetime.

Параметры:
xfloat или последовательность float

Количество дней (дробная часть представляет часы, минуты и секунды) с начала эпохи. См. get_epoch, чтобы узнать эпоху. Ее можно изменить с помощью rcParams["date.epoch"] (значение по умолчанию: '1970-01-01T00:00:00') или set_epoch.

tzstr или tzinfo, по умолчанию: rcParams["timezone"] (значение по умолчанию: 'UTC')

Часовой пояс для x. Если это строка, tz передается в dateutil.tz.

Возвращает:
datetime или последовательность объектов datetime

Даты возвращаются в часовом поясе tz.

Если x — последовательность, будет возвращена последовательность объектов datetime.

Примечания

Предполагается григорианский календарь; это не общепринятая практика. Подробности см. в строке документации модуля.

matplotlib.dates.num2timedelta(x)[исходный код]

Преобразует количество дней в объект timedelta.

Если x — последовательность, будет возвращена последовательность объектов timedelta.

Параметры:
xfloat, последовательность float

Количество дней. Дробная часть представляет часы, минуты и секунды.

Возвращает:
datetime.timedelta или list[datetime.timedelta]
classmatplotlib.dates.relativedelta(dt1=None, dt2=None, years=0, months=0, days=0, leapdays=0, weeks=0, hours=0, minutes=0, seconds=0, microseconds=0, year=None, month=None, day=None, weekday=None, yearday=None, nlyearday=None, hour=None, minute=None, second=None, microsecond=None)

Базовые классы: object

Тип relativedelta предназначен для применения к существующему объекту datetime: он может заменить отдельные компоненты этого объекта или представлять временной интервал.

В его основу положена спецификация превосходной работы М.-А. Лембурга, реализованной в расширении mx.DateTime. Однако обратите внимание, что этот тип НЕ реализует тот же алгоритм, что и его работа. Не ОЖИДАЙТЕ, что он будет вести себя так же, как соответствующий тип в mx.DateTime.

Создать экземпляр relativedelta можно двумя разными способами. Первый — передать ему два класса даты/datetime:

relativedelta(datetime1, datetime2)

Второй — передать любое количество следующих именованных аргументов:

relativedelta(arg1=x,arg2=y,arg3=z...)

year, month, day, hour, minute, second, microsecond:
    Absolute information (argument is singular); adding or subtracting a
    relativedelta with absolute information does not perform an arithmetic
    operation, but rather REPLACES the corresponding value in the
    original datetime with the value(s) in relativedelta.

years, months, weeks, days, hours, minutes, seconds, microseconds:
    Relative information, may be negative (argument is plural); adding
    or subtracting a relativedelta with relative information performs
    the corresponding arithmetic operation on the original datetime value
    with the information in the relativedelta.

weekday:
    One of the weekday instances (MO, TU, etc) available in the
    relativedelta module. These instances may receive a parameter N,
    specifying the Nth weekday, which could be positive or negative
    (like MO(+1) or MO(-2)). Not specifying it is the same as specifying
    +1. You can also use an integer, where 0=MO. This argument is always
    relative e.g. if the calculated date is already Monday, using MO(1)
    or MO(-1) won't change the day. To effectively make it absolute, use
    it in combination with the day argument (e.g. day=1, MO(1) for first
    Monday of the month).

leapdays:
    Will add given days to the date found, if year is a leap
    year, and the date found is post 28 of february.

yearday, nlyearday:
    Set the yearday or the non-leap year day (jump leap days).
    These are converted to day/month/leapdays information.

Именованные аргументы бывают относительными и абсолютными. Аргументы во множественном числе являются относительными, а в единственном — абсолютными. Для каждого аргумента в указанном ниже порядке сначала применяется абсолютная форма (установка каждого атрибута в заданное значение), а затем относительная (прибавление значения к атрибуту).

Прибавляя этот relativedelta к datetime, атрибуты обрабатываются в следующем порядке:

  1. Год
  2. Месяц
  3. День
  4. Часы
  5. Минуты
  6. Секунды
  7. Микросекунды

Наконец, применяется weekday с использованием описанного выше правила.

Например

>>> from datetime import datetime
>>> from dateutil.relativedelta import relativedelta, MO
>>> dt = datetime(2018, 4, 9, 13, 37, 0)
>>> delta = relativedelta(hours=25, day=1, weekday=MO(1))
>>> dt + delta
datetime.datetime(2018, 4, 2, 14, 37)

Сначала день устанавливается равным 1 (первое число месяца), затем добавляется 25 часов, в результате чего получается второе число и 14-й час. Наконец, применяется weekday, но поскольку второе число уже приходится на понедельник, это ничего не меняет.

normalized()

Возвращает версию этого объекта, в которой относительные атрибуты представлены только целыми значениями.

>>> relativedelta(days=1.5, hours=2).normalized()
relativedelta(days=+1, hours=+14)
Возвращает:

Возвращает объект dateutil.relativedelta.relativedelta.

propertyweeks
classmatplotlib.dates.rrulewrapper(freq, tzinfo=None, **kwargs)[источник]

Базовый класс: object

Простая обёртка над dateutil.rrule, позволяющая гибко задавать отметки дат.

Параметры:
freq{YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY}

Частота отметок. Эти константы определены в dateutil.rrule, но также доступны из matplotlib.dates.

tzinfodatetime.tzinfo, необязательный

Информация о часовом поясе. По умолчанию — None.

**kwargs

Дополнительные именованные аргументы передаются в dateutil.rrule.

set(**kwargs)[источник]

Задать параметры для существующей обёртки.

matplotlib.dates.set_epoch(epoch)[источник]

Задать эпоху (начало отсчёта дат) для вычислений с датами и временем.

Эпоха по умолчанию — rcParams["date.epoch"] (по умолчанию: '1970-01-01T00:00:00').

Для обеспечения точности до микросекунд дата на графике должна находиться примерно в пределах 70 лет от эпохи. Matplotlib внутренне представляет даты как количество дней с эпохи, поэтому динамический диапазон чисел с плавающей точкой должен укладываться в коэффициент 2^52.

set_epoch необходимо вызвать до преобразования каких-либо дат (то есть рядом с разделом импорта), иначе будет вызвано исключение RuntimeError.

См. также Точность дат и эпохи.

Параметры:
epochstr

корректная дата UTC, разбираемая с помощью numpy.datetime64 (не указывайте часовой пояс).

© 2012–2026 Matplotlib Development Team. All rights reserved.
Licensed under the Matplotlib License Agreement.
https://matplotlib.org/stable/api/dates_api.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API