{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "Doc. : Figures animées.ipynb", "version": "0.3.2", "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" } }, "cells": [ { "metadata": { "id": "m021j2SK7Ofx", "colab_type": "text" }, "cell_type": "markdown", "source": [ "♻️ _Attention, ce document est mis à jour régulièrement en fonction des remarques, des questions et de l'évolution des environnements._\n", "\n", "## 1. Introduction\n", "En Python, il est facile de créer des figures animées grâce à Matplotlib et sa fonction `animation`. Des programmes Python qui utilisent cette bibliothèque fonctionneront normalement sur des environnements comme Spyder ou PyCharm. Pour avoir le même rendu avec Jupyter, il est nécessaire de convertir cette animation soit en Javascript, soit en vidéo. Ces conversions se font facilement grâce à deux lignes de codes à ajouter dans le programme :\n", "\n", "* pour la conversion Javascript\n", "```python\n", "from IPython.display import HTML\n", "HTML(ani.to_jshtml())\n", "```\n", "\n", "* pour la conversion video\n", "```python\n", "from IPython.display import HTML\n", "HTML(anim.to_html5_video())\n", "```\n", "\n", "A vous choisir le type de conversion que vous voulez utiliser. Les deux ont des avantages et des inconvénients. La conversion Javascript permet d'avoir, sous la figure, des commandes qui permettent de contrôler le défilement de l'animation. La conversion vidéo permet d'avoir une vidéo que l'on peut afficher en plein écran et que l'on peut télécharger au format `.mp4`. Par contre, pour pouvoir utiliser la conversion vidéo, les codecs `ffmpeg` doivent être présents sur la machine. Si ce n'est pas cas, un message d'erreur apparaitra.\n", "\n", "\n", "## 2. Animation des figures en Javascript\n", "## 2.1. Exemple 1 : Sinusoide" ] }, { "metadata": { "id": "r5FXtJsw7K4Q", "colab_type": "code", "colab": { "base_uri": "https://localhost:8080/", "height": 487 }, "outputId": "7f08e7f7-e51f-4302-f9f1-2907c1ceecdd" }, "cell_type": "code", "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from matplotlib import animation\n", "from IPython.display import HTML\n", "\n", "# Définition des paramètes de la figure\n", "fig, ax = plt.subplots()\n", "plt.close()\n", "ax.set_xlim(( 0, 2))\n", "ax.set_ylim((-2, 2))\n", "line, = ax.plot([], [], lw=2)\n", "\n", "# fonction initialisation\n", "def init():\n", " line.set_data([], [])\n", " return (line,)\n", "\n", "# fonction animation appelée séquentiellement\n", "def animate(i):\n", " x = np.linspace(0, 2, 1000)\n", " y = np.sin(2 * np.pi * (x - 0.01 * i))\n", " line.set_data(x, y)\n", " return (line,)\n", " \n", "anim = animation.FuncAnimation(fig, animate, init_func=init,\n", " frames=100, interval=20, \n", " blit=True)\n", "\n", "# conversion javascript\n", "HTML(anim.to_jshtml())" ], "execution_count": 1, "outputs": [ { "output_type": "execute_result", "data": { "text/html": [ "\n", "\n", "\n", "\n", "