{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"# Animation in Matplotlib\n",
"\n",
"An animated plot is just a series of plots that are linked together to work as a movie.\n",
"\n",
"Matplotlib come with a rich collection of tools to allow us to make movies. In this notebook, we will give a simple example, to get you started. Read online to get many more examples and details. \n",
"\n",
"First we load in a bunch of modules that do the work in creating the animation. "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"execution": {
"iopub.execute_input": "2020-07-08T04:44:22.493482Z",
"iopub.status.busy": "2020-07-08T04:44:22.490912Z",
"iopub.status.idle": "2020-07-08T04:44:22.707128Z",
"shell.execute_reply": "2020-07-08T04:44:22.706716Z"
}
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"from numpy import *\n",
"from matplotlib.pyplot import *\n",
"import matplotlib.animation as animation\n",
"from IPython.display import HTML"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next, we create a figure object using the subplot command, and define two functions \"init\" and \"animate\". Init() sets up the y-data in the plot for us, for the initial frame in the animation. Animate() defines the data for the series of plots we want to display.\n",
"\n",
"In this case, we plot translates of the sine function. Animate(i) uses the variable i to count frames, and that i value determines how much we translate the sine function by. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Example 1\n",
"In this example, i will range from 0 to 99, giving a full cycle of the sine function. "
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"execution": {
"iopub.execute_input": "2020-07-08T04:44:22.710824Z",
"iopub.status.busy": "2020-07-08T04:44:22.710462Z",
"iopub.status.idle": "2020-07-08T04:44:22.830189Z",
"shell.execute_reply": "2020-07-08T04:44:22.829837Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"filenames": {
"image/png": "/home/mikel/Documents/CallystoShortsJBook/_build/jupyter_execute/shorts/MatplotAnimation_4_0.png"
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig, ax = subplots()\n",
"\n",
"x = linspace(0, 2*pi, 100)\n",
"line, = ax.plot(x, sin(x));\n",
"\n",
"\n",
"def init(): # only required for blitting to give a clean slate.\n",
" line.set_ydata([np.nan] * len(x))\n",
" return line,\n",
"\n",
"\n",
"def animate(i):\n",
" line.set_ydata(sin(x + 2*pi*i / 100)) # update the data.\n",
" return line,\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next, we call the animation function as follows, making use of the figure, init and animate functions defined above.\n",
"\n",
"This creates a new data object call \"ani\" which holds the movie. "
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"execution": {
"iopub.execute_input": "2020-07-08T04:44:22.833108Z",
"iopub.status.busy": "2020-07-08T04:44:22.832789Z",
"iopub.status.idle": "2020-07-08T04:44:22.849276Z",
"shell.execute_reply": "2020-07-08T04:44:22.849539Z"
}
},
"outputs": [],
"source": [
"ani = animation.FuncAnimation(\n",
" fig, animate, init_func=init, interval=20, blit=True, save_count=100) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Finally, we display the movie using the HTML() command from the module IPython.display."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"execution": {
"iopub.execute_input": "2020-07-08T04:44:22.851769Z",
"iopub.status.busy": "2020-07-08T04:44:22.851459Z",
"iopub.status.idle": "2020-07-08T04:44:25.507555Z",
"shell.execute_reply": "2020-07-08T04:44:25.507802Z"
}
},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"HTML(ani.to_html5_video())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Example 2. Saving the movie\n",
"\n",
"A simple \"save\" command turns the animation into an mp4 movie file, that you can use elsewhere. "
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"execution": {
"iopub.execute_input": "2020-07-08T04:44:25.511554Z",
"iopub.status.busy": "2020-07-08T04:44:25.511200Z",
"iopub.status.idle": "2020-07-08T04:44:28.201986Z",
"shell.execute_reply": "2020-07-08T04:44:28.201655Z"
}
},
"outputs": [],
"source": [
"ani.save(\"movie.mp4\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Example 3. Playing the movie\n",
"\n",
"Now that the movie is saved, we can just play it directly in html. This is a useful trick in case you have a movie that takes a long time to create. You can create and save, and let the next user just play the result."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"execution": {
"iopub.execute_input": "2020-07-08T04:44:28.205218Z",
"iopub.status.busy": "2020-07-08T04:44:28.204878Z",
"iopub.status.idle": "2020-07-08T04:44:28.207165Z",
"shell.execute_reply": "2020-07-08T04:44:28.206836Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%html\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## In case of problems: ffmpeg\n",
"\n",
"For the animations above to work, your computer system needs to have the ffmpeg package installed. You will get an error if you don't have it.\n",
"\n",
"To install, you can open a terminal window in your Jupyter hub, and issue the following command:\n",
"\n",
"```\n",
" sudo apt-get install ffmpeg\n",
"```\n",
"\n",
"Hopefully this gets you up and running. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Live Python Animation\n",
"\n",
"Sometimes we want to have Python code running, and plotting a result at the same time. This is handy when creating complex animations and you don't want to use the complex methds above.\n",
"\n",
"You do need to load in a couple of special commands, to control when the plot gets cleared and how quickly it is redrawn."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"execution": {
"iopub.execute_input": "2020-07-08T04:44:28.209256Z",
"iopub.status.busy": "2020-07-08T04:44:28.208947Z",
"iopub.status.idle": "2020-07-08T04:44:28.210671Z",
"shell.execute_reply": "2020-07-08T04:44:28.210350Z"
}
},
"outputs": [],
"source": [
"from IPython.display import clear_output\n",
"from time import sleep"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"execution": {
"iopub.execute_input": "2020-07-08T04:44:28.217419Z",
"iopub.status.busy": "2020-07-08T04:44:28.216490Z",
"iopub.status.idle": "2020-07-08T04:44:50.117212Z",
"shell.execute_reply": "2020-07-08T04:44:50.115263Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"filenames": {
"image/png": "/home/mikel/Documents/CallystoShortsJBook/_build/jupyter_execute/shorts/MatplotAnimation_16_0.png"
},
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"x = linspace(0,2*pi) # the x axis values\n",
"\n",
"for t in range(0,100): # our animation loop\n",
" plot(x,sin(x - t/10)) # plot a sine curve, shifted by t/10\n",
" show() # show the plot\n",
" sleep(.1) # wait for 0.1 seconds\n",
" clear_output(wait=True) # then clear the plot and go to next one"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Caution\n",
"\n",
"The above animation code is live, and running Python code. This means it will NOT work in a static webpage or HTML output. But it is great for when you are working with real code."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[](https://github.com/callysto/curriculum-notebooks/blob/master/LICENSE.md)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}