Generating a movie from Python without saving individual frames to files

MatplotlibPythonServer Side ProgrammingProgramming

Using the FuncAnimation method, we can create a film. We will create a user-defined method, update, to keep on changing the position of particles and at the end, the method would return the scatter instance.

Steps

  • Get the particles initial position, velocity, force, and size.

  • Create a new figure, or activate an existing figure with figsize = (7, 7).

  • Add an axes to the current figure and make it the current axes, with xlim and ylim.

  • Plot the scatter for initial position of the particles.

  • Makes an animation by repeatedly calling a function *func*. We can pass a user-defined method that helps to change the position of particles, into FuncAnimation class.

  • Show the figure using plt.show().

Example

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import numpy as np

dt = 0.005
n = 20
L = 1
particles = np.zeros(n, dtype=[("position", float, 2),
                                ("velocity", float, 2),
                                ("force", float, 2),
                                ("size", float, 1)])

particles["position"] = np.random.uniform(0, L, (n, 2));
particles["velocity"] = np.zeros((n, 2));
particles["size"] = 0.5 * np.ones(n);

fig = plt.figure(figsize=(7, 7))
ax = plt.axes(xlim=(0, L), ylim=(0, L))
scatter = ax.scatter(particles["position"][:, 0], particles["position"][:, 1])

def update(frame_number):
   particles["force"] = np.random.uniform(-2, 2., (n, 2));
   particles["velocity"] = particles["velocity"] + particles["force"] * dt
   particles["position"] = particles["position"] + particles["velocity"] * dt

   particles["position"] = particles["position"] % L
   scatter.set_offsets(particles["position"])
   return scatter,

anim = FuncAnimation(fig, update, interval=10)
plt.show()

Output

raja
Updated on 17-Mar-2021 08:14:06

Advertisements