Datumstaktgeber und -formatter

PythonPythonBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Dieses Labor zielt darauf ab, ein Verständnis davon zu vermitteln, wie man die verschiedenen Datumstaktgeber und -formatter in Matplotlib verwendet. In diesem Tutorial wird gezeigt, wie man diese Funktionen verwendet, um die X-Achse eines Diagramms mit zeitbasierten Daten anzupassen.

Tipps für die VM

Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Importieren der erforderlichen Bibliotheken

Wir beginnen mit dem Importieren der erforderlichen Bibliotheken für dieses Tutorial. Wir werden matplotlib und numpy verwenden.

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

Definieren der Taktgeber und Formatter

Wir definieren die verschiedenen Taktgeber und Formatter, die wir verwenden werden. Dieses Beispiel verwendet die folgenden Taktgeber:

  • 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))

Und die folgenden Formatter:

  • 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")',
]

Zeichnen der Graphen

Jetzt können wir unsere Graphen erstellen. Wir werden zwei Teilgraphen erstellen, um die Taktgeber und Formatter separat zu demonstrieren. Für jeden Taktgeber und Formatter zeichnen wir einen Graphen, der zeigt, wie er die X-Achse beeinflusst. Wir verwenden die plot_axis-Funktion dazu. Diese Funktion setzt die gemeinsamen Parameter für jede Achse, wie die Stiele, die Taktparameter und die Grenzen. Sie setzt auch den Taktgeber und den Formatter für die X-Achse.

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)

Anzeigen der Graphen

Schließlich können wir die Graphen mit der plt.show()-Funktion anzeigen.

plt.show()

Zusammenfassung

In diesem Tutorial haben wir gelernt, wie man die verschiedenen Datumstaktgeber und -formatter in Matplotlib verwendet. Wir haben mehrere Graphen gezeichnet, die gezeigt haben, wie jeder Taktgeber und Formatter die X-Achse eines Graphen mit zeitbasierten Daten beeinflusst. Dieses Wissen kann nützlich sein, wenn man Visualisierungen von Zeitreihendaten erstellt.