Effizientes Linienplotten mit Matplotlib

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 Tutorial lernen wir, wie wir die LineCollection-Funktion in Matplotlib verwenden, um mehrere Linien gleichzeitig effizient zu zeichnen. Wir werden sehen, wie man mehrere Linien mit unterschiedlichen Farben und Stilen zeichnet und wie man ein maskiertes Array verwendet, um einige Werte zu maskieren. Wir werden auch lernen, wie man die ScalarMappable.set_array-Funktion verwendet, um ein Array von Werten auf Farben abzubilden.

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.

Bibliotheken importieren

Bevor wir beginnen, müssen wir die erforderlichen Bibliotheken importieren. Wir werden matplotlib.pyplot und numpy verwenden.

import matplotlib.pyplot as plt
import numpy as np

Daten erstellen

Als nächstes müssen wir die Daten erstellen, die wir verwenden werden, um die Linien zu zeichnen. Wir werden numpy verwenden, um ein 2D-Array von x- und y-Werten zu erstellen.

x = np.arange(100)
ys = x[:50, np.newaxis] + x[np.newaxis, :]

Linienammlung erstellen

Jetzt können wir ein LineCollection-Objekt mit der LineCollection-Funktion erstellen. Wir können die Parameter linewidths, colors und linestyle einstellen, um das Aussehen der Linien anzupassen.

colors = plt.rcParams['axes.prop_cycle'].by_key()['color']

segs = np.zeros((50, 100, 2))
segs[:, :, 1] = ys
segs[:, :, 0] = x

segs = np.ma.masked_where((segs > 50) & (segs < 60), segs)

line_segments = LineCollection(segs, linewidths=(0.5, 1, 1.5, 2),
                               colors=colors, linestyle='solid')

Diagramm erstellen

Wir können jetzt ein Diagramm mit matplotlib erstellen und das LineCollection-Objekt mit der add_collection-Methode des Axes-Objekts zum Diagramm hinzufügen.

fig, ax = plt.subplots()
ax.set_xlim(x.min(), x.max())
ax.set_ylim(ys.min(), ys.max())

ax.add_collection(line_segments)
ax.set_title('Line collection with masked arrays')
plt.show()

Farben auf Werte abbilden

Wir können auch ein Array von Werten auf Farben abbilden, indem wir die ScalarMappable.set_array-Funktion verwenden. Wir werden einen neuen Datensatz und ein neues LineCollection-Objekt erstellen, wobei der array-Parameter auf die x-Werte gesetzt ist. Anschließend können wir die colorbar-Methode des Figure-Objekts verwenden, um eine Farbskala zum Diagramm hinzuzufügen.

N = 50
x = np.arange(N)
ys = [x + i for i in x]
segs = [np.column_stack([x, y]) for y in ys]

fig, ax = plt.subplots()
ax.set_xlim(np.min(x), np.max(x))
ax.set_ylim(np.min(ys), np.max(ys))

line_segments = LineCollection(segs, array=x,
                               linewidths=(0.5, 1, 1.5, 2),
                               linestyles='solid')
ax.add_collection(line_segments)
axcb = fig.colorbar(line_segments)
axcb.set_label('Line Number')
ax.set_title('Line Collection with mapped colors')
plt.sci(line_segments)
plt.show()

Zusammenfassung

In diesem Tutorial haben wir gelernt, wie die LineCollection-Funktion in Matplotlib verwendet werden kann, um mehrere Linien gleichzeitig effizient zu zeichnen. Wir haben gesehen, wie man mehrere Linien mit unterschiedlichen Farben und Stilen zeichnet und wie man ein maskiertes Array verwendet, um einige Werte zu maskieren. Wir haben auch gelernt, wie die ScalarMappable.set_array-Funktion verwendet wird, um ein Array von Werten auf Farben abzubilden.