Programmatische Steuerung der Subplot-Anpassung

Beginner

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

Einführung

Matplotlib ist eine leistungsstarke Bibliothek zur Erstellung von Visualisierungen in Python. Manchmal müssen Sie beim Erstellen von Diagrammen die Subplot-Parameter manuell anpassen. In diesem Lab erfahren Sie, wie Sie die Subplot-Parameter programmgesteuert anhand der Größe der Beschriftungen anpassen können.

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 der 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 benötigen matplotlib.pyplot und matplotlib.transforms, um das Diagramm zu erstellen und die Subplot-Parameter zu manipulieren.

import matplotlib.pyplot as plt
import matplotlib.transforms as mtransforms

Erstellen des Diagramms

Lassen Sie uns ein einfaches Liniendiagramm mit einigen langen y-Beschriftungen erstellen.

fig, ax = plt.subplots()
ax.plot(range(10))
ax.set_yticks([2, 5, 7], labels=['really, really, really', 'long', 'labels'])

Definieren der Zeichnen-Rückruffunktion

Wir werden eine Funktion definieren, die jedes Mal aufgerufen wird, wenn das Diagramm gezeichnet wird. Diese Funktion wird die Begrenzungsfelder der y-Beschriftungen berechnen, bestimmen, ob der Subplot genug Platz für die Beschriftungen lässt, und die Subplot-Parameter gegebenenfalls anpassen.

def on_draw(event):
    bboxes = []
    for label in ax.get_yticklabels():
        ## Begrenzungsfeld in Pixeln
        bbox_px = label.get_window_extent()
        ## Transformieren in relative Koordinaten der Figur. Dies ist die Umkehrung von
        ## transFigure.
        bbox_fig = bbox_px.transformed(fig.transFigure.inverted())
        bboxes.append(bbox_fig)
    ## das Begrenzungsfeld, das alle Begrenzungsfelder umschließt, ebenfalls in relativen Koordinaten der Figur
    bbox = mtransforms.Bbox.union(bboxes)
    if fig.subplotpars.left < bbox.width:
        ## Verschieben Sie den linken Rand des Subplots nach rechts
        fig.subplots_adjust(left=1.1*bbox.width)  ## etwas auffüllen
        fig.canvas.draw()

Verbinden des Zeichenevents mit der Rückruffunktion

Wir müssen das draw_event mit unserer on_draw-Funktion verbinden.

fig.canvas.mpl_connect('draw_event', on_draw)

Zeige das Diagramm an

Schließlich werden wir das Diagramm anzeigen.

plt.show()

Zusammenfassung

In diesem Lab haben wir gelernt, wie man die Subplot-Parameter programmgesteuert anhand der Größe der Beschriftungen anpasst. Wir haben das Modul matplotlib.transforms verwendet, um die Begrenzungsfelder der Beschriftungen zu berechnen, und das draw_event, um unsere on_draw-Funktion aufzurufen.