Skip to main content

Easy matplotlib animation.

Project description

celluloid

Build Status codecov pypi pypi versions

Easy Matplotlib Animation

Creating animations should be easy. This module makes it easy to adapt your existing visualization code to create an animation.

Install

pip install celluloid

Manual

Follow these steps:

  1. Create a matplotlib Figure and create a Camera from it:
from celluloid import Camera
fig = plt.figure()
camera = Camera(fig)
  1. Reusing the figure and after each frame is created, take a snapshot with the camera.
plt.plot(...)
plt.fancy_stuff()
camera.snap()
  1. After all frames have been captured, create the animation.
animation = camera.animate()
animation.save('animation.mp4')

The entire module is less than 50 lines of code.

Examples

Minimal

As simple as it gets.

from matplotlib import pyplot as plt
from celluloid import Camera

fig = plt.figure()
camera = Camera(fig)
for i in range(10):
    plt.plot([i] * 10)
    camera.snap()
animation = camera.animate()

Subplots

Animation at the top.

import numpy as np
from matplotlib import pyplot as plt
from celluloid import Camera

fig, axes = plt.subplots(2)
camera = Camera(fig)
t = np.linspace(0, 2 * np.pi, 128, endpoint=False)
for i in t:
    axes[0].plot(t, np.sin(t + i), color='blue')
    axes[1].plot(t, np.sin(t - i), color='blue')
    camera.snap()
animation = camera.animate()

Images

Domain coloring example.

import numpy as np
from matplotlib import pyplot as plt
from matplotlib.colors import hsv_to_rgb

from celluloid import Camera

fig = plt.figure()
camera = Camera(fig)

for a in np.linspace(0, 2 * np.pi, 30, endpoint=False):
    x = np.linspace(-3, 3, 800)
    X, Y = np.meshgrid(x, x)
    x = X + 1j * Y
    y = (x ** 2 - 2.5) * (x - 2.5 * 1j) * (x + 2.5 * 1j) \
        * (x - 2 - 1j) ** 2 / ((x - np.exp(1j * a)) ** 2
        * (x - np.exp(1j * 2 * a)) ** 2)

    H = np.angle(y) / (2 * np.pi) + .5
    r = np.log2(1. + np.abs(y))
    S = (1. + np.abs(np.sin(2. * np.pi * r))) / 2.
    V = (1. + np.abs(np.cos(2. * np.pi * r))) / 2.

    rgb = hsv_to_rgb(np.dstack((H, S, V)))
    ax.imshow(rgb)
    camera.snap()
animation = camera.animate()

Legends

import matplotlib
from matplotlib import pyplot as plt
from celluloid import Camera

fig = plt.figure()
camera = Camera(fig)
for i in range(5):
    t = plt.plot(range(i, i + 5))
    plt.legend(t, [f'line {i}'])
    camera.snap()
animation = camera.animate()

Limitations

  • The axes' limits should be the same for all plots. The limits of the animation will be the limits of the final plot.
  • Legends will accumulate from previous frames. Pass the artists to the legend function to draw them separately.

Credits

Inspired by plotnine.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

celluloid-0.2.0.tar.gz (6.4 kB view details)

Uploaded Source

Built Distribution

celluloid-0.2.0-py3-none-any.whl (5.4 kB view details)

Uploaded Python 3

File details

Details for the file celluloid-0.2.0.tar.gz.

File metadata

  • Download URL: celluloid-0.2.0.tar.gz
  • Upload date:
  • Size: 6.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.20.0

File hashes

Hashes for celluloid-0.2.0.tar.gz
Algorithm Hash digest
SHA256 568b1512c4a97483759e9436c3f3e5dc5566da350179aa1872992ec8d82706e1
MD5 78da3ef8ff3944f253b16a923e427380
BLAKE2b-256 0d3180e96c4b221de342eef55f1f07de84b11b5f7cfb8c3b00e235a0bdd0b476

See more details on using hashes here.

File details

Details for the file celluloid-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: celluloid-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 5.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.20.0

File hashes

Hashes for celluloid-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5cebd41276d9658f7667a2f1f565f566763a6110273b4af35c958b1407a9f277
MD5 e960f4accf0881b6f8cbfaf993669dba
BLAKE2b-256 60a77fbe80721c6f1b7370c4e50c77abe31b4d5cfeb58873d4d32f48ae5a0bae

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page