Matplotlib Regen-Simulation

Beginner

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

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.