Generating a movie from Python without saving individual frames to files

Creating animated movies in Python using matplotlib's FuncAnimation allows you to generate smooth animations without saving individual frames to disk. This approach is memory-efficient and perfect for real-time particle simulations.

Key Concepts

The animation works by repeatedly calling an update function that modifies particle positions and returns updated plot elements. FuncAnimation handles the timing and display automatically.

Steps to Create the Animation

  • Initialize particles with position, velocity, force, and size properties

  • Create a matplotlib figure with specified dimensions

  • Add axes with appropriate x and y limits

  • Create initial scatter plot for particle positions

  • Define an update function that modifies particle properties each frame

  • Use FuncAnimation to repeatedly call the update function

  • Display the animation with plt.show()

Complete Example

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

# Animation parameters
dt = 0.005
n = 20
L = 1

# Create particle array with structured data type
particles = np.zeros(n, dtype=[("position", float, 2),
                              ("velocity", float, 2),
                              ("force", float, 2),
                              ("size", float, 1)])

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

# Create figure and axes
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):
    # Apply random forces
    particles["force"] = np.random.uniform(-2, 2., (n, 2))
    
    # Update velocity and position
    particles["velocity"] = particles["velocity"] + particles["force"] * dt
    particles["position"] = particles["position"] + particles["velocity"] * dt
    
    # Apply periodic boundary conditions
    particles["position"] = particles["position"] % L
    
    # Update scatter plot
    scatter.set_offsets(particles["position"])
    return scatter,

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

How the Animation Works

The update() function is called repeatedly by FuncAnimation. Each call:

  • Generates random forces for all particles

  • Updates velocities using force and time step

  • Updates positions using velocity and time step

  • Applies periodic boundary conditions (particles wrap around edges)

  • Updates the scatter plot with new positions

Key Parameters

Parameter Description Effect
dt Time step Controls simulation speed
interval Milliseconds between frames Controls animation smoothness
n Number of particles More particles = more complex animation

Benefits of This Approach

  • Memory efficient − No temporary files created

  • Real-time − Animation plays immediately

  • Interactive − Can modify parameters during runtime

  • Clean − No file cleanup required

Conclusion

Using FuncAnimation with matplotlib provides an elegant way to create animated movies directly in Python without file management overhead. This approach is perfect for real-time simulations and interactive visualizations where you want immediate results.

Updated on: 2026-03-25T18:03:59+05:30

448 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements