Introducción
Esta práctica es un tutorial paso a paso sobre cómo crear una simulación de lluvia utilizando la biblioteca Matplotlib de Python. La simulación animará la escala y la opacidad de 50 puntos de dispersión para simular gotas de lluvia cayendo sobre una superficie.
Consejos sobre la VM
Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.
A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.
Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje su retroalimentación después de la sesión y lo resolveremos rápidamente para usted.
Crear una nueva Figura y Ejes
El primer paso es crear una nueva figura y un eje que la llene. Esta será la superficie en la que se dibujará la simulación.
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([])
Crear datos de lluvia
A continuación, crearemos los datos de lluvia. Crearemos 50 gotas de lluvia en posiciones aleatorias, con tasas de crecimiento aleatorias y colores aleatorios.
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)
Construir el diagrama de dispersión
Ahora, construiremos el diagrama de dispersión que actualizaremos durante la animación a medida que las gotas de lluvia evolucionen.
scat = ax.scatter(rain_drops['position'][:, 0], rain_drops['position'][:, 1],
s=rain_drops['size'], lw=0.5, edgecolors=rain_drops['color'],
facecolors='none')
Crear la función de actualización
La función de actualización será llamada por el objeto FuncAnimation para actualizar el diagrama de dispersión durante la animación.
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'])
Crear la animación
Finalmente, crearemos la animación utilizando el objeto FuncAnimation, pasando la figura, la función de actualización, el intervalo entre cuadros en milisegundos y el número de cuadros a guardar.
animation = FuncAnimation(fig, update, interval=10, save_count=100)
plt.show()
Resumen
En este laboratorio, aprendimos cómo crear una simulación de lluvia utilizando la biblioteca Matplotlib de Python. Creamos una nueva Figura y Ejes, creamos los datos de lluvia, construimos el diagrama de dispersión, creamos la función de actualización y creamos la animación utilizando el objeto FuncAnimation.