Einführung
Dieses Labor ist ein Schritt-für-Schritt-Tutorial zur Erstellung einer Regensimulation mit der Matplotlib-Bibliothek in Python. Die Simulation animiert die Größe und die Opazität von 50 Streupunkten, um Regentropfen zu simulieren, die auf einer Fläche fallen.
Tipps für die virtuelle Maschine
Nachdem der Start der virtuellen Maschine abgeschlossen 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 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.
Erstellen einer neuen Figur und Achse
Der erste Schritt besteht darin, eine neue Figur und eine Achse zu erstellen, die diese ausfüllt. Dies wird die Leinwand sein, auf der die Simulation gezeichnet wird.
fig = plt.figure(figsize=(7, 7))
ax = fig.add_axes([0, 0, 1, 1], frameon=False)
ax.set_xlim(0, 1), ax.set_xticks([])
ax.set_ylim(0, 1), ax.set_yticks([])
Regen-Daten erstellen
Als nächstes werden wir die Regen-Daten erstellen. Wir werden 50 Regentropfen an zufälligen Positionen mit zufälligen Wachstumsraten und zufälligen Farben erzeugen.
n_drops = 50
rain_drops = np.zeros(n_drops, dtype=[('position', float, (2,)),
('size', float),
('growth', float),
('color', float, (4,))])
rain_drops['position'] = np.random.uniform(0, 1, (n_drops, 2))
rain_drops['growth'] = np.random.uniform(50, 200, n_drops)
Den Streudiagrammplot erstellen
Jetzt werden wir den Streudiagrammplot erstellen, den wir während der Animation aktualisieren werden, wenn die Regentropfen sich entwickeln.
scat = ax.scatter(rain_drops['position'][:, 0], rain_drops['position'][:, 1],
s=rain_drops['size'], lw=0.5, edgecolors=rain_drops['color'],
facecolors='none')
Die Aktualisierungsfunktion erstellen
Die Aktualisierungsfunktion wird vom FuncAnimation-Objekt aufgerufen, um den Streudiagrammplot während der Animation zu aktualisieren.
def update(frame_number):
## Get an index which we can use to re-spawn the oldest raindrop.
current_index = frame_number % n_drops
## Make all colors more transparent as time progresses.
rain_drops['color'][:, 3] -= 1.0/len(rain_drops)
rain_drops['color'][:, 3] = np.clip(rain_drops['color'][:, 3], 0, 1)
## Make all circles bigger.
rain_drops['size'] += rain_drops['growth']
## Pick a new position for oldest rain drop, resetting its size,
## color and growth factor.
rain_drops['position'][current_index] = np.random.uniform(0, 1, 2)
rain_drops['size'][current_index] = 5
rain_drops['color'][current_index] = (0, 0, 0, 1)
rain_drops['growth'][current_index] = np.random.uniform(50, 200)
## Update the scatter collection, with the new colors, sizes and positions.
scat.set_edgecolors(rain_drops['color'])
scat.set_sizes(rain_drops['size'])
scat.set_offsets(rain_drops['position'])
Die Animation erstellen
Schließlich werden wir die Animation mit dem FuncAnimation-Objekt erstellen, indem wir die Figur, die Aktualisierungsfunktion, den Intervall zwischen den Frames in Millisekunden und die Anzahl der zu speichernden Frames übergeben.
animation = FuncAnimation(fig, update, interval=10, save_count=100)
plt.show()
Zusammenfassung
In diesem Lab haben wir gelernt, wie man eine Regen-Simulation mit der Matplotlib-Bibliothek in Python erstellt. Wir haben eine neue Figur und Achsen erstellt, die Regen-Daten erzeugt, den Streudiagrammplot konstruiert, die Aktualisierungsfunktion erstellt und die Animation mit dem FuncAnimation-Objekt erstellt.