Einführung
Matplotlib ist eine weit verbreitete Python-Bibliothek zur Erstellung von Graphen, die hochwertige 2D- und 3D-Grafiken erzeugt. In diesem Lab werden wir lernen, wie in Matplotlib Tick-Formatter verwendet werden.
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 nutzen.
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 von Matplotlib und Einrichten des Graphen
Zunächst müssen wir die Matplotlib-Bibliothek importieren und den Graphen einrichten. Wir werden einen leeren Graphen mit einer y-Achse und einer x-Achse erstellen. Wir werden auch die Achse so konfigurieren, dass nur die untere Spur sichtbar ist, die Tick-Positionen festlegen und die Tick-Länge definieren.
import matplotlib.pyplot as plt
from matplotlib import ticker
def setup(ax, title):
"""Set up common parameters for the Axes in the example."""
## nur die untere Spur anzeigen
ax.yaxis.set_major_locator(ticker.NullLocator())
ax.spines[['left', 'right', 'top']].set_visible(False)
## Tick-Positionen definieren
ax.xaxis.set_major_locator(ticker.MultipleLocator(1.00))
ax.xaxis.set_minor_locator(ticker.MultipleLocator(0.25))
ax.xaxis.set_ticks_position('bottom')
ax.tick_params(which='major', width=1.00, length=5)
ax.tick_params(which='minor', width=0.75, length=2.5, labelsize=10)
ax.set_xlim(0, 5)
ax.set_ylim(0, 1)
ax.text(0.0, 0.2, title, transform=ax.transAxes,
fontsize=14, fontname='Monospace', color='tab:blue')
fig, ax = plt.subplots(figsize=(8, 2))
setup(ax, "Tick Formatters")
Einfache Formatierung
In diesem Schritt werden wir zeigen, wie eine einfache Formatierung verwendet wird, indem eine Zeichenfolge oder eine Funktion an ~.Axis.set_major_formatter oder ~.Axis.set_minor_formatter übergeben wird. Wir werden zwei Graphen erstellen, einen mit einem Zeichenfolgen-Formatter und einen mit einem Funktions-Formatter.
fig0, axs0 = plt.subplots(2, 1, figsize=(8, 2))
fig0.suptitle('Simple Formatting')
## Eine ``str``, die die Syntax der Formatierungszeichenfolgefunktion verwendet,
## kann direkt als Formatter verwendet werden. Die Variable ``x`` ist der Tick-Wert
## und die Variable ``pos`` ist die Tick-Position. Dies erstellt automatisch einen
## StrMethodFormatter.
setup(axs0[0], title="'{x} km'")
axs0[0].xaxis.set_major_formatter('{x} km')
## Eine Funktion kann ebenfalls direkt als Formatter verwendet werden. Die Funktion
## muss zwei Argumente akzeptieren: ``x`` für den Tick-Wert und ``pos`` für die
## Tick-Position und muss eine ``str`` zurückgeben. Dies erstellt automatisch einen
## FuncFormatter.
setup(axs0[1], title="lambda x, pos: str(x-5)")
axs0[1].xaxis.set_major_formatter(lambda x, pos: str(x-5))
fig0.tight_layout()
Formatierung von Formatter-Objekten
In diesem Schritt werden wir .Formatter-Objekte verwenden, um die Tick-Markierungen zu formatieren. Wir werden sieben Graphen erstellen, wobei jeder einen anderen Formatter verwendet.
fig1, axs1 = plt.subplots(7, 1, figsize=(8, 6))
fig1.suptitle('Formatter Object Formatting')
## Null-Formatter
setup(axs1[0], title="NullFormatter()")
axs1[0].xaxis.set_major_formatter(ticker.NullFormatter())
## StrMethod-Formatter
setup(axs1[1], title="StrMethodFormatter('{x:.3f}')")
axs1[1].xaxis.set_major_formatter(ticker.StrMethodFormatter("{x:.3f}"))
## FuncFormatter kann als Dekorator verwendet werden
@ticker.FuncFormatter
def major_formatter(x, pos):
return f'[{x:.2f}]'
setup(axs1[2], title='FuncFormatter("[{:.2f}]".format)')
axs1[2].xaxis.set_major_formatter(major_formatter)
## Fixed-Formatter
setup(axs1[3], title="FixedFormatter(['A', 'B', 'C',...])")
## FixedFormatter sollte nur zusammen mit FixedLocator verwendet werden.
## Andernfalls kann man nicht sicher sein, wo die Labels landen werden.
positions = [0, 1, 2, 3, 4, 5]
labels = ['A', 'B', 'C', 'D', 'E', 'F']
axs1[3].xaxis.set_major_locator(ticker.FixedLocator(positions))
axs1[3].xaxis.set_major_formatter(ticker.FixedFormatter(labels))
## Scalar-Formatter
setup(axs1[4], title="ScalarFormatter()")
axs1[4].xaxis.set_major_formatter(ticker.ScalarFormatter(useMathText=True))
## FormatStr-Formatter
setup(axs1[5], title="FormatStrFormatter('#%d')")
axs1[5].xaxis.set_major_formatter(ticker.FormatStrFormatter("#%d"))
## Prozent-Formatter
setup(axs1[6], title="PercentFormatter(xmax=5)")
axs1[6].xaxis.set_major_formatter(ticker.PercentFormatter(xmax=5))
fig1.tight_layout()
Anzeige der Graphen
Schließlich werden wir die Graphen mit plt.show() anzeigen.
plt.show()
Zusammenfassung
In diesem Lab haben wir gelernt, wie man in Matplotlib Tick-Formatter verwendet, indem man eine Zeichenfolge oder eine Funktion an ~.Axis.set_major_formatter oder ~.Axis.set_minor_formatter übergibt, oder indem man eine Instanz einer der verschiedenen ~.ticker.Formatter-Klassen erstellt und diese an ~.Axis.set_major_formatter oder ~.Axis.set_minor_formatter übergibt. Wir haben auch gelernt, wie man einen Graphen mit Tick-Positionen, Tick-Länge und einem Titel einrichtet.