{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Построение графиков с помощью matplotlib\n", "\n", "[К оглавлению](00_contents.ipynb)\n", "\n", "Основная графическая библиотека Python - `matplotlib`. Подпакет `pyplot` в этой библиотеке содержит простые функции для построения графиков, похожие на аналогичные функции в Matlab.\n", "\n", "[Введение в pyplot на сайте разработчиков](http://matplotlib.org/users/pyplot_tutorial.html)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Подключение пакета" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline \n", "#графики встраиваются в блокнот;" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Можно использовать следующие способы отображения графиков:\n", "\n", "`%matplotlib inline` - в блокноте, в виде статичного изображения\n", "\n", "`%matplotlib` - в отдельном окне" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Выбор формата графиков\n", "\n", "При необходимости, можно переключить формат, в котором выводятся графики. Векторные форматы позволяют сохранить качество при масштабировании и печати, но требуют больше ресурсов. По умолчанию используется растровый формат png" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%config InlineBackend.figure_format = 'svg' #векторный формат #векторный формат" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Линейные графики и диаграммы рассеяния\n", "\n", "Графики в Matplotlib строятся по точкам. Координаты точек хранятся в массивах numpy." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import numpy as np\n", "x = np.linspace(-10, 10, 20)\n", "y = x**2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Для вывода линейных графиков и диаграмм рассеяния используется функция `plot()`" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "plt.plot(x, y);" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Сокращенная форма для указания параметров графика\n", "plt.plot(x, y, 'ro-'); #изменение цвета и типа линии и маркера - см. подсказку по Shift-Tab;" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "plt.plot(x, y, color='red', marker='o', linestyle='--', markerfacecolor='blue');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Оформление графиков\n", "В ячейке блокнота можно несколько раз вызывать функцию `plot()` для нанесения нескольких линий на график. Также можно использовать различные функции для форматирования графика и добавления легенды." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Полная форма указания параметров графика\n", "plt.plot(x, y, color='red', marker='o', linestyle='--', label='Линия 1')\n", "plt.plot(x, -y + 100, color='blue', marker='x', label='Линия 2')\n", "plt.grid() # сетка\n", "plt.legend(loc='best');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "см. также [Примеры размещения легенды графика](http://matplotlib.org/users/legend_guide.html)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "С помощью функций `xlabel()`, `ylabel()` можно подписать координатные оси. Заглавие графика можно задать с помощью функции `title()`. \n", "\n", "В названия и аннотации можно включать математические символы и формулы, используя $\\LaTeX$. Чтобы не возникало ошибок из-за специальных символов, используемых для набора формул, нужно добавлять символ `r` перед строкой с формулой, например: `r'$\\alpha$'`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "plt.plot(x, y, color='red', marker='o', linestyle='--', label='Линия 1')\n", "plt.plot(x, -y + 100, color='blue', marker='x', label='Линия 2')\n", "plt.legend(loc='upper center', ncol=2)\n", "plt.grid()\n", "\n", "#Подписи для осей:\n", "plt.xlabel('x', fontsize=14)\n", "plt.ylabel('y', fontsize=14)\n", "\n", "#Диапазон оси y:\n", "plt.ylim(0, 120)\n", "\n", "#Заголовок:\n", "plt.title(r'График функций $y = x ^2 $ и $y = 100 - x^2$', fontsize=16, y=1.05);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Аннотирование графиков\n", "\n", "Текстовые пояснения на графиках можно выводить с помощью функции `text()`.\n", "Функция `annotate()` позволяет создавать более сложные аннотации, например, со стрелками, указывающими на определенную область графика.\n", "Горизонтальные и вертикальные опорные линии можно строить с помощью функций `axhline()`, `axvline()`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "t = np.linspace(0., 4 * np.pi, 101)\n", "f = np.sin(t) + 3\n", "plt.plot(t,f)\n", "\n", "plt.axhline(3,color='lightgray',linestyle='--')\n", "plt.text(10.5, 3.05, 'Среднее')\n", "plt.annotate('Локальный\\nминимум', xy=(3 * np.pi / 2, 2), \n", " xytext=(3.7, 2.7), \n", " arrowprops=dict(arrowstyle='->', color='red'));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[Руководство по аннотированию графиков](http://matplotlib.org/users/annotations_guide.html)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Дополнительные ресурсы\n", "\n", "- Галерея matplotlib http://matplotlib.org/gallery.html\n", "- Python scientific lecture notes https://scipy-lectures.github.io/\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Примеры кода из Интернет можно загружать с помощью волшебной команды `%load`\n", "\n", "Пусть, необходимо построить график, похожий на такой: \n", "![Полярный график](http://matplotlib.org/mpl_examples/pie_and_polar_charts/polar_bar_demo.png)\n", "http://matplotlib.org/examples/pie_and_polar_charts/polar_bar_demo.html\n", "\n", "\n", "Для получения шаблона кода достаточно скопировать ссылку на исходный код (.py) на странице примера и указать эту ссылку в команде `%load`:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#%load http://matplotlib.org/mpl_examples/pie_and_polar_charts/polar_bar_demo.py" ] } ], "metadata": { "hide_input": false, "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.4.3" }, "latex_envs": { "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 0 }, "toc": { "toc_cell": false, "toc_number_sections": false, "toc_threshold": 4, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 0 }