{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Анимация в matplotlib\n", "\n", "## Пример из руководства\n", "\n", "Коротко разберем, как можно осуществлять анимацию средствами matplotlib. Начнем с примера, приведенного в [руководстве](https://matplotlib.org/stable/api/animation_api.html).\n", "\n", "```python\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from matplotlib.animation import FuncAnimation\n", "\n", "fig, ax = plt.subplots()\n", "xdata, ydata = [], []\n", "ln, = plt.plot([], [], 'ro')\n", "\n", "def init():\n", " ax.set_xlim(0, 2*np.pi)\n", " ax.set_ylim(-1, 1)\n", " return ln,\n", "\n", "def update(frame):\n", " xdata.append(frame)\n", " ydata.append(np.sin(frame))\n", " ln.set_data(xdata, ydata)\n", " return ln,\n", "\n", "ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),\n", " init_func=init, blit=True)\n", "plt.show()\n", "```\n", "\n", "Запуск скрипта с таким содержимым создаст окно, на котором постепенно построится график синуса. Есть как минимум два подхода заставить этот пример работать в `jupyter notebook`:\n", "\n", "a) применить команду `%matplotlib notebook`, т.е. сделать что-то такое\n", "```python\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from matplotlib.animation import FuncAnimation\n", "%matplotlib notebook\n", "```\n", "Эта команда встраивает окна, созданные `matplotlib`, в выход ячейки, сохраняя интерактивность.\n", "\n", "b) использовать специализированные средства `jupyter` ноутбуков для отображения анимации. Для этого надо заменить `plt.show()` на набор следующих команд\n", "```python\n", "from IPython.display import HTML, display\n", "display(HTML(animation.to_jshtml()))\n", "plt.close(fig)\n", "```\n", "Метод `to_jshtml` генерирует `html` код, соответствующий анимации, функция `HTML` из модуля `IPython.display` обрабатывает `html`, а функция `display` отображает его. Метод `plt.close` используется чтобы скрыть созданную фигуру, т.к. она отображается в `jupyter notebook` по умолчанию, несмотря на то, что метод `plt.show` не вызывается.\n", " \n", " \n", "Т.к. первый способ не отображается на этом ресурсе (приблизительно по той же причине, что графики `plotly`), то везде ниже будет использоваться второй способ." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "