The extension for Altair, matplotlib, and Plotly animations.
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.
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")
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")
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
Click on any image to see the source code
Click on any image to see the source code
If you have a dope ass animation that you think should be in the Gallery, submit a PR!