Einführung
In diesem Lab werden wir lernen, wie man in Matplotlib multicolore Linien erstellt. Wir werden die LineCollection-Funktion verwenden, um eine Reihe von Liniensegmenten zu erstellen und diese individuell nach ihrer Ableitung zu färben. Wir werden auch lernen, wie man eine Grenz-Norm verwendet, um die Liniensegmente zu färben.
VM-Tipps
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.
Bibliotheken importieren
Wir beginnen mit dem Import der erforderlichen Bibliotheken für dieses Lab. Wir werden matplotlib.pyplot und numpy importieren.
import matplotlib.pyplot as plt
import numpy as np
Daten erstellen
Wir werden einen numpy-Array x erstellen, der 500 gleichmäßig verteilte Werte zwischen 0 und 3π enthält. Wir werden auch einen weiteren numpy-Array y erstellen, der die Sinuswerte der Werte in x enthält. Schließlich werden wir einen numpy-Array dydx erstellen, der die erste Ableitung von y enthält.
x = np.linspace(0, 3 * np.pi, 500)
y = np.sin(x)
dydx = np.cos(0.5 * (x[:-1] + x[1:]))
Liniensegmente erstellen
Wir werden eine Reihe von Liniensegmenten erstellen, damit wir sie individuell färben können. Wir werden die numpy-Funktion concatenate verwenden, um zwei Arrays points[:-1] und points[1:] entlang der zweiten Achse zusammenzufügen. Anschließend werden wir das resultierende Array in ein N x 1 x 2-Array umformen, damit wir die Punkte leicht zusammenlegen können, um die Segmente zu erhalten. Das Segments-Array für die Linienkollektion muss (numlines) x (Punkte pro Linie) x 2 (für x und y) sein.
points = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)
Erstellen einer kontinuierlichen Norm
Wir werden eine kontinuierliche Norm erstellen, um von Datenpunkten zu Farben abzubilden. Wir werden die Normalize-Funktion aus matplotlib.pyplot verwenden, um die dydx-Werte zwischen ihrem Minimum und Maximum zu normalisieren. Anschließend werden wir die LineCollection-Funktion verwenden, um eine Reihe von Liniensegmenten zu erstellen und diese individuell nach ihrer Ableitung zu färben. Wir werden die set_array-Funktion verwenden, um die Werte festzulegen, die für die Farbzuordnung verwendet werden.
norm = plt.Normalize(dydx.min(), dydx.max())
lc = LineCollection(segments, cmap='viridis', norm=norm)
lc.set_array(dydx)
lc.set_linewidth(2)
Erstellen einer Farbskala
Wir werden eine Farbskala erstellen, um die Zuordnung zwischen Farben und dydx-Werten anzuzeigen. Wir werden die colorbar-Funktion aus matplotlib.pyplot verwenden, um eine Farbskala zu erstellen.
line = plt.gca().add_collection(lc)
plt.colorbar(line)
Verwenden einer Boundary Norm
Wir werden stattdessen eine Boundary Norm verwenden, um die Liniensegmente zu färben. Wir werden eine ListedColormap erstellen, die drei Farben enthält: rot, grün und blau. Anschließend werden wir eine BoundaryNorm mit den Grenzen -1, -0,5, 0,5 und 1 und der ListedColormap erstellen. Wir werden die set_array-Funktion verwenden, um die Werte festzulegen, die für die Farbzuordnung verwendet werden.
cmap = ListedColormap(['r', 'g', 'b'])
norm = BoundaryNorm([-1, -0.5, 0.5, 1], cmap.N)
lc = LineCollection(segments, cmap=cmap, norm=norm)
lc.set_array(dydx)
lc.set_linewidth(2)
Erstellen eines Teilplots
Wir werden einen Teilplot erstellen, um die gefärbten Liniensegmente anzuzeigen. Wir werden die subplots-Funktion aus matplotlib.pyplot verwenden, um ein 2x1-Gitter von Teilplots zu erstellen, und die Parameter sharex und sharey, um die x- und y-Achsen zwischen den Teilplots zu teilen.
fig, axs = plt.subplots(2, 1, sharex=True, sharey=True)
line = axs[0].add_collection(lc)
fig.colorbar(line, ax=axs[0])
Festlegen von Achsengrenzen
Wir werden die x- und y-Achsengrenzen für die Teilplots festlegen.
axs[0].set_xlim(x.min(), x.max())
axs[0].set_ylim(-1.1, 1.1)
Zeige das Diagramm an
Wir werden die show-Funktion aus matplotlib.pyplot verwenden, um das Diagramm anzuzeigen.
plt.show()
Zusammenfassung
In diesem Lab haben wir gelernt, wie man in Matplotlib multicolore Linien erstellt. Wir haben die LineCollection-Funktion verwendet, um eine Reihe von Liniensegmenten zu erstellen und diese individuell nach ihrer Ableitung zu färben. Wir haben auch gelernt, wie man eine Boundary Norm verwendet, um die Liniensegmente zu färben. Wir haben die Normalize-Funktion verwendet, um die dydx-Werte zwischen ihrem Minimum und Maximum zu normalisieren, und die ListedColormap-Funktion, um eine Farbpalette mit drei Farben - rot, grün und blau - zu erstellen. Wir haben die BoundaryNorm-Funktion verwendet, um eine Boundary Norm mit den Grenzen -1, -0,5, 0,5 und 1 und der ListedColormap zu erstellen. Schließlich haben wir die subplots-Funktion verwendet, um ein 2x1-Gitter von Teilplots zu erstellen, und die Parameter sharex und sharey, um die x- und y-Achsen zwischen den Teilplots zu teilen. Anschließend haben wir das Diagramm mit der show-Funktion angezeigt.