Hinweis
Gehen Sie zum Ende, um den vollständigen Beispielcode herunterzuladen.
Animiertes Histogramm#
Verwenden Sie die BarContainer des Histogramms, um eine Reihe von Rechtecken für ein animiertes Histogramm zu zeichnen.
import functools
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
# Setting up a random number generator with a fixed state for reproducibility.
rng = np.random.default_rng(seed=19680801)
# Fixing bin edges.
HIST_BINS = np.linspace(-4, 4, 100)
# Histogram our data with numpy.
data = rng.standard_normal(1000)
n, _ = np.histogram(data, HIST_BINS)
Um das Histogramm zu animieren, benötigen wir eine animate-Funktion, die eine zufällige Zahlenmenge generiert und die Höhen der Rechtecke aktualisiert. Die animate-Funktion aktualisiert die Rectangle-Patches auf einer Instanz von BarContainer.
def animate(frame_number, bar_container):
# Simulate new data coming in.
data = rng.standard_normal(1000)
n, _ = np.histogram(data, HIST_BINS)
for count, rect in zip(n, bar_container.patches):
rect.set_height(count)
return bar_container.patches
Die Verwendung von hist() ermöglicht uns den Erhalt einer Instanz von BarContainer, was eine Sammlung von Rectangle-Instanzen ist. Da FuncAnimation nur den Frame-Nummer-Parameter an die Animationsfunktion übergibt, verwenden wir functools.partial, um den Parameter bar_container zu fixieren.
# Output generated via `matplotlib.animation.Animation.to_jshtml`.
fig, ax = plt.subplots()
_, _, bar_container = ax.hist(data, HIST_BINS, lw=1,
ec="yellow", fc="green", alpha=0.5)
ax.set_ylim(top=55) # set safe limit to ensure that all data is visible.
anim = functools.partial(animate, bar_container=bar_container)
ani = animation.FuncAnimation(fig, anim, 50, repeat=False, blit=True)
plt.show()
Gesamtlaufzeit des Skripts: (0 Minuten 13,268 Sekunden)