Anpassen der Zeichnungsreihenfolge in Matplotlib

Beginner

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

Einführung

In diesem Tutorial lernen wir die Zeichnungsreihenfolge von Künstlern in Matplotlib und wie wir die Reihenfolge mit der zorder-Eigenschaft anpassen können. Wir werden auch untersuchen, wie wir die Reihenfolge für einzelne Künstler ändern können und den Standardwert von zorder für verschiedene Künstlertypen.

VM-Tipps

Nachdem die VM gestartet 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.

Das Verständnis von zorder

Die zorder-Eigenschaft in Matplotlib ist eine Gleitkommazahl, die die Zeichnungsreihenfolge von Künstlern bestimmt. Künstler mit höherer zorder werden über denen mit niedrigerer zorder gezeichnet. Der Standardwert von zorder hängt vom Typ des Künstlers ab. Beispielsweise haben Bilder einen Standardwert von zorder von 0, während Patches einen Standardwert von zorder von 1 haben.

Das Ändern von zorder

Um die Zeichnungsreihenfolge von Künstlern zu ändern, können wir ihre zorder-Eigenschaft explizit festlegen, indem wir das zorder-Parameter verwenden, wenn wir den Künstler erstellen. Beispielsweise können wir Punkte über Linien in einem Streudiagramm verschieben, indem wir den zorder der Punkte auf einen Wert höher als den zorder der Linie setzen.

import matplotlib.pyplot as plt
import numpy as np

r = np.linspace(0.3, 1, 30)
theta = np.linspace(0, 4*np.pi, 30)
x = r * np.sin(theta)
y = r * np.cos(theta)

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(6, 3.2))

ax1.plot(x, y, 'C3', lw=3)
ax1.scatter(x, y, s=120)
ax1.set_title('Lines on top of dots')

ax2.plot(x, y, 'C3', lw=3)
ax2.scatter(x, y, s=120, zorder=2.5)  ## move dots on top of line
ax2.set_title('Dots on top of lines')

plt.tight_layout()
plt.show()

Das Festlegen von zorder für Markierungen und Rasterlinien

Wir können die set_axisbelow()-Methode oder den axes.axisbelow-Parameter verwenden, um den zorder von Markierungen und Rasterlinien festzulegen.

ax = plt.axes()
ax.plot([1, 2, 3], [2, 4, 3])
ax.set_axisbelow(True)
ax.yaxis.grid(color='gray', linestyle='dashed')

Benutzerdefinierte Reihenfolge von Elementen

Wir können auch die zorder von Elementen in einer benutzerdefinierten Reihenfolge festlegen. Beispielsweise können wir die zorder einer Legende so einstellen, dass sie zwischen zwei Linien liegt.

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 7.5, 100)
plt.rcParams['lines.linewidth'] = 5
plt.figure()
plt.plot(x, np.sin(x), label='zorder=2', zorder=2)  ## bottom
plt.plot(x, np.sin(x+0.5), label='zorder=3',  zorder=3)
plt.axhline(0, label='zorder=2.5', color='lightgrey', zorder=2.5)
plt.title('Custom order of elements')
l = plt.legend(loc='upper right')
l.set_zorder(2.5)  ## legend between blue and orange line
plt.show()

Zusammenfassung

In diesem Tutorial haben wir uns mit der zorder-Eigenschaft in Matplotlib und der Änderung der Zeichnungsreihenfolge von Künstlern beschäftigt. Wir haben auch untersucht, wie man die zorder für Markierungen und Rasterlinien setzt und eine benutzerdefinierte Reihenfolge von Elementen erstellt. Das Verständnis von zorder ist unerlässlich, wenn man komplexe Visualisierungen mit überlappenden Elementen erstellt.