Matplotlib Text Rotation

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

In diesem Lab lernst du, wie du im Matplotlib Text mit dem Parameter rotation_mode rotieren kannst. Der Parameter rotation_mode bestimmt die Reihenfolge der Rotation und Ausrichtung des Texts. Es stehen zwei Modi zur Verfügung: default und anchor.

Tipps für die VM

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

Manchmal musst du 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 du bei der Lernphase Probleme hast, kannst du Labby gerne fragen. Gib nach der Sitzung Feedback, und wir werden das Problem für dich prompt beheben.

Importiere die erforderlichen Bibliotheken

Zunächst müssen wir die erforderlichen Bibliotheken importieren. In diesem Lab werden wir Matplotlib verwenden, um die Diagramme zu erstellen.

import matplotlib.pyplot as plt

Definiere die Funktion test_rotation_mode

Wir werden eine Funktion namens test_rotation_mode erstellen, die Subplots erstellt, um die verschiedenen Rotationsmodi zu testen. Sie nimmt zwei Parameter: fig und mode.

def test_rotation_mode(fig, mode):

Definiere die Listen für die horizontale und vertikale Ausrichtung

Als nächstes werden wir die Listen für die horizontale und vertikale Ausrichtung definieren, die zur Erstellung der Subplots verwendet werden. Wir werden für jede Liste drei Elemente erstellen: "left" (links), "center" (mittig) und "right" (rechts) für die horizontale Ausrichtung und "top" (oben), "center" (mittig), "baseline" (Baseline) und "bottom" (unten) für die vertikale Ausrichtung.

ha_list = ["left", "center", "right"]
va_list = ["top", "center", "baseline", "bottom"]

Erzeuge die Subplots

Jetzt werden wir die Subplots mit der subplots-Funktion erstellen. Wir werden ein Gitter von Subplots mit dem gleichen Seitenverhältnis erstellen und die Markierungen auf den x- und y-Achsen entfernen. Wir werden auch eine vertikale und horizontale Linie in der Mitte jedes Subplots hinzufügen, um die Ausrichtung zu visualisieren.

axs = fig.subplots(len(va_list), len(ha_list), sharex=True, sharey=True,
                   subplot_kw=dict(aspect=1),
                   gridspec_kw=dict(hspace=0, wspace=0))

for i, va in enumerate(va_list):
    for j, ha in enumerate(ha_list):
        ax = axs[i, j]
        ax.set(xticks=[], yticks=[])
        ax.axvline(0.5, color="skyblue", zorder=0)
        ax.axhline(0.5, color="skyblue", zorder=0)
        ax.plot(0.5, 0.5, color="C0", marker="o", zorder=1)

Füge Text zu den Subplots hinzu

Wir werden Text zu jedem Subplot mit der text-Funktion hinzufügen. Wir werden die Parameter rotation (Drehung), horizontalalignment (horizontale Ausrichtung), verticalalignment (vertikale Ausrichtung) und rotation_mode (Rotationsmodus) verwenden, um den Text zu drehen und auszurichten. Wir werden auch den Parameter bbox verwenden, um die Begrenzung des Texts hervorzuheben.

kw = (
    {} if mode == "default" else
    {"bbox": dict(boxstyle="square,pad=0.", ec="none", fc="C1", alpha=0.3)}
)

texts = {}

for i, va in enumerate(va_list):
    for j, ha in enumerate(ha_list):
        ax = axs[i, j]
        tx = ax.text(0.5, 0.5, "Tpg",
                     size="x-large", rotation=40,
                     horizontalalignment=ha, verticalalignment=va,
                     rotation_mode=mode, **kw)
        texts[ax] = tx

Betone die Begrenzung des Texts

Wenn der Rotationmodus auf 'default' gesetzt ist, werden wir die Begrenzung des Texts mit einem Rechteck betonen. Wir werden die get_window_extent-Funktion verwenden, um die Begrenzung zu erhalten und sie mit dem transData-Attribut in die Datenkoordinaten umzuwandeln.

if mode == "default":
    fig.canvas.draw()
    for ax, text in texts.items():
        bb = text.get_window_extent().transformed(ax.transData.inverted())
        rect = plt.Rectangle((bb.x0, bb.y0), bb.width, bb.height,
                             facecolor="C1", alpha=0.3, zorder=2)
        ax.add_patch(rect)

Erstelle die Subfiguren und rufe die test_rotation_mode-Funktion auf

Wir werden zwei Subfiguren erstellen und die test_rotation_mode-Funktion mit den Parametern fig und mode aufrufen.

fig = plt.figure(figsize=(8, 5))
subfigs = fig.subfigures(1, 2)
test_rotation_mode(subfigs[0], "default")
test_rotation_mode(subfigs[1], "anchor")
plt.show()

Zusammenfassung

In diesem Lab haben wir gelernt, wie man in Matplotlib Text mit dem Parameter rotation_mode rotieren kann. Wir haben eine Funktion namens test_rotation_mode erstellt, die Subplots erstellt, um die verschiedenen Rotationsmodi zu testen. Wir haben die Listen für die horizontale und vertikale Ausrichtung definiert, die Subplots erstellt, Text zu den Subplots hinzugefügt und die Begrenzung des Texts hervorgehoben. Schließlich haben wir die Subfiguren erstellt und die test_rotation_mode-Funktion aufgerufen.