Popularity
3.2
Growing
Activity
3.9
-
414
10
25

Description

A better way to build animated Matplotlib gifs. Just: pip install gif

Programming language: Jupyter Notebook
License: MIT License
Tags: Data Visualization     Matplotlib     Multimedia     Graphics     Gif     Pillow     PIL     Animation    
Latest version: v3.0.0

gif alternatives and similar packages

Based on the "Data Visualization" category.
Alternatively, view gif alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of gif or a related project?

Add another 'Data Visualization' Package

README

About

The extension for Altair, matplotlib, and Plotly animations.

Installation

gif is installed at the command line:

pip install -U gif

Depending on which flavour of gif you plan to use you'll likely need some additional dependencies:

pip install "gif[altair]"     
pip install "gif[matplotlib]"
pip install "gif[plotly]"

Note: gif[altair] uses Selenium, which requires a properly configured chromedriver or geckodriver.

Usage (Altair)

Imports and data:

import random
import altair as alt
import pandas as pd
import gif

df = pd.DataFrame({
    't': list(range(10)) * 10,
    'x': [random.randint(0, 100) for _ in range(100)],
    'y': [random.randint(0, 100) for _ in range(100)]
})

Decorate a plot function with gif.frame and return an Altair object:

@gif.frame
def plot(i):
    d = df[df['t'] == i]
    chart = alt.Chart(d).encode(
        x=alt.X('x', scale=alt.Scale(domain=(0, 100))),
        y=alt.Y('y', scale=alt.Scale(domain=(0, 100)))
    ).mark_circle()
    return chart

Build a bunch of "frames" with a standard for loop:

frames = []
for i in range(10):
    frame = plot(i)
    frames.append(frame)

Specify the duration between each frame and save:

gif.save(frames, 'example.gif', duration=100, unit="ms", between="frames")

Usage (matplotlib)

Imports and data:

import random
from matplotlib import pyplot as plt
import gif

x = [random.randint(0, 100) for _ in range(100)]
y = [random.randint(0, 100) for _ in range(100)]

(Optional) Set the dots per inch resolution to 300:

gif.options.matplotlib["dpi"] = 300

Decorate a plot function with gif.frame (and don't return anything):

@gif.frame
def plot(i):
    xi = x[i*10:(i+1)*10]
    yi = y[i*10:(i+1)*10]
    plt.scatter(xi, yi)
    plt.xlim((0, 100))
    plt.ylim((0, 100))

Build a bunch of "frames" with a standard for loop:

frames = []
for i in range(10):
    frame = plot(i)
    frames.append(frame)

Specify the duration of the entire gif:

gif.save(frames, 'example.gif', duration=3.5, unit="s", between="startend")

Usage (Plotly)

Imports and data:

import random
import plotly.graph_objects as go
import pandas as pd
import gif

df = pd.DataFrame({
    't': list(range(10)) * 10,
    'x': [random.randint(0, 100) for _ in range(100)],
    'y': [random.randint(0, 100) for _ in range(100)]
})

Decorate a plot function with gif.frame and return a Plotly figure:

@gif.frame
def plot(i):
    d = df[df['t'] == i]
    fig = go.Figure()
    fig.add_trace(go.Scatter(
        x=d["x"],
        y=d["y"],
        mode="markers"
    ))
    fig.update_layout(width=500, height=300)
    return fig

Build a bunch of "frames" with a standard for loop:

frames = []
for i in range(10):
    frame = plot(i)
    frames.append(frame)

Specify the duration (milliseconds) between each frame and save:

gif.save(frames, 'example.gif', duration=100)

Click on any image to see the source code

covid.gif emoji.gif pyramid.gif
textbooks.gif wave.gif

Click on any image to see the source code

attachment.gif hop.gif phone.gif
seinfeld.gif attachment.gif love.gif

Click on any image to see the source code

bubble.gif swirl.gif waterfall.gif

If you have a dope ass animation that you think should be in the Gallery, submit a PR!


*Note that all licence references and agreements mentioned in the gif README section above are relevant to that project's source code only.