""" .. _date_formatters_locators: ================================= Date tick locators and formatters ================================= This example illustrates the usage and effect of the various date locators and formatters. """ 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 def plot_axis(ax, locator=None, xmax='2002-02-01', fmt=None, formatter=None): """Set up common parameters for the Axes in the example.""" 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') # %% # :ref:`date-locators` # -------------------- locators = [ # locator as str, xmax, fmt ('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, \nbyweekday=(MO, TU, WE, TH, FR), ' 'bysetpos=-1))', '2000-07-01', '%Y-%m-%d'), ] 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) # %% # :ref:`date-formatters` # ---------------------- formatters = [ 'AutoDateFormatter(ax.xaxis.get_major_locator())', 'ConciseDateFormatter(ax.xaxis.get_major_locator())', 'DateFormatter("%b %Y")', ] 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) # %% # # .. admonition:: References # # The use of the following functions, methods, classes and modules is shown # in this example: # # - `matplotlib.dates.AutoDateLocator` # - `matplotlib.dates.YearLocator` # - `matplotlib.dates.MonthLocator` # - `matplotlib.dates.DayLocator` # - `matplotlib.dates.WeekdayLocator` # - `matplotlib.dates.HourLocator` # - `matplotlib.dates.MinuteLocator` # - `matplotlib.dates.SecondLocator` # - `matplotlib.dates.MicrosecondLocator` # - `matplotlib.dates.RRuleLocator` # - `matplotlib.dates.rrulewrapper` # - `matplotlib.dates.DateFormatter` # - `matplotlib.dates.AutoDateFormatter` # - `matplotlib.dates.ConciseDateFormatter`