{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Научная графика в Python\n", "\n", "Автор: Шабанов Павел Александрович\n", "\n", "E-mail: pa.shabanov@gmail.com\n", "\n", "URL: [Заметки по программированию в науках о Земле](http://progeoru.blogspot.ru/)\n", "\n", "Дата последнего обновления: 12.03.2017" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Преамбула\n", "%matplotlib inline\n", "\n", "import os\n", "import matplotlib.pyplot as plt\n", "from matplotlib import rcParams\n", "\n", "import numpy as np\n", "\n", "def save(name='', fmt='png'):\n", " pwd = os.getcwd()\n", " iPath = './pictures/{}'.format(fmt)\n", " if not os.path.exists(iPath):\n", " os.mkdir(iPath)\n", " os.chdir(iPath)\n", " plt.savefig('{}.{}'.format(name, fmt), fmt='png')\n", " os.chdir(pwd)\n", " #plt.close()\n", "\n", "rcParams['font.family'] = 'fantasy'\n", "rcParams['font.fantasy'] = 'Arial'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Глава 9 Деления координатной оси Ticks\n", "\n", "### Содержание главы\n", "\n", "1. Контейнер Ticks;\n", "\n", "2. Locator и Formatter.\n", "\n", "Деления (ticks) неотделимы от координатной оси на которой они находятся. Однако свойства самих делений (цвет, длина, толщина и др.), и их подписей (кегль, поворот, цвет шрифта, шрифт и др.), а также связанные с ними линии вспомогательной сетки grid, удобно хранить в отдельном хранилище-контейнере Ticks, а не в контейнере Axis. Повторюсь, что эти вещи очень связаны и одно в отрыве от другого теряет смысл. Тем более, что для удобства пользователей разработчики сделали множество методов для работы с делениями из контейнеров более высокого уровня (Axes, Axis). \n", "\n", "### Электронные ресурсы:\n", "\n", "+ [Описание элементов рисунка в matplotlib](http://matplotlib.org/users/artists.html);\n", "\n", "+ [Пример работы с главными и вспомогательными делениями координатных осей методами Locator и Formatter](http://matplotlib.org/examples/pylab_examples/major_minor_demo1.html);\n", "\n", "+ [О Locator и Formatter](http://matplotlib.org/api/ticker_api.html)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 9.1 Контейнер Ticks\n", "\n", "Контейнер `matplotlib.axis.Tick` - это последний и самый низкоуровневый из Artists-контейнеров, самая маленькая \"матрёшка\". Он содержит экземпляры делений (ticks), линий вспомогательной сетки (grid lines) и подписей (labels) для верхних (upper ticks) и нижних делений (lower ticks). К каждому из них есть прямой доступ как к одному из атрибуту экземпляра Tick. Также контейнер существуют логические переменные с помощью которых можно определить с какой стороны будут нанесены подписи и деления: для оси ординат справа/слева, а для оси абсцисс - сверху/снизу в прямоугольной системе координат.\n", "\n", "Для работы непросредственно с экземпляром Tick, необходимо \"спуститься\" к нему с более высоких контейнеров-уровней. \n", "\n", "> Axes - Axis(YAxis) - методы \"set-get\" -> `ax.yaxis.get_major_ticks()`\n", "\n", "Для такого объекта определены следующие атрибуты:\n", "\n", "------------------------------------------------------------------------\n", "\n", "Атрибут Tick -> Описание\n", "\n", "------------------------------------------------------------------------\n", "\n", "+ **tick1line** - экземпляр Line2D;\n", "\n", "+ **tick2line** - экземпляр Line2D;\n", "\n", "+ **gridline** - экземпляр Line2D;\n", "\n", "+ **label1** - экземпляр Text;\n", "\n", "+ **label2** - экземпляр Text;\n", "\n", "+ **gridOn** - логическая переменная, разрешающая рисовать tickline;\n", "\n", "+ **tick1On** - логическая переменная, разрешающая рисовать первую tickline;\n", "\n", "+ **tick2On** - логическая переменная, разрешающая рисовать вторую tickline;\n", "\n", "+ **label1On** - логическая переменная, разрешающая рисовать tick label;\n", "\n", "+ **label2On** - логическая переменная, разрешающая рисовать tick label.\n", "\n", "------------------------------------------------------------------------\n", "\n", "Атрибуты с номером 1 - это стандартно отображаемые деления, которые располагаются слева и/или снизу.\n", "\n", "Атрибуты с номером 2 - соответственно справа и/или снизу.\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Major ticks on Y-axis \n", "Major ticks on Y-axis \n", "Major ticks on Y-axis \n", "Major ticks on Y-axis \n", "Major ticks on Y-axis \n", "Major ticks on Y-axis \n", "Major ticks on X-axis \n", "Major ticks on X-axis \n", "Major ticks on X-axis \n", "Major ticks on X-axis \n", "Major ticks on X-axis \n", "Major ticks on X-axis \n", "Major ticks on X-axis \n" ] }, { "data": { "image/png": "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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Пример 9.1\n", "\n", "import numpy as np\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111)\n", "\n", "rect = ax.patch\n", "rect.set_facecolor('k')\n", "\n", "N = 31\n", "x = np.arange(N)\n", "y = 100*np.random.rand(N)\n", "\n", "ax.plot(x, y, color='red', linewidth=2.0)\n", "\n", "#formatter = mpl.ticker.FormatStrFormatter(u'%.2f руб.')\n", "#ax.yaxis.set_major_formatter(formatter)\n", "\n", "for tick in ax.yaxis.get_major_ticks():\n", " print 'Major ticks on Y-axis %s' % type(tick)\n", " tick.label1On = True\n", " tick.label1.set_color('green')\n", " tick.label2On = True\n", " tick.label2.set_color('blue')\n", " # серые деления на оси ОY слева\n", " tick.tick1line.set_color('grey')\n", " tick.tick1line.set_markeredgewidth(2)\n", " tick.tick1line.set_markersize(25)\n", " # линии вспомогательной сетки для оси OX\n", " tick.gridOn = True\n", " tick.gridline.set_color('white')\n", " tick.gridline.set_linewidth(1.5)\n", " \n", "for tick in ax.xaxis.get_major_ticks():\n", " print 'Major ticks on X-axis %s' % type(tick)\n", " tick.label1On = True\n", " tick.label1.set_color('red')\n", " tick.label2On = True\n", " tick.label2.set_color('orange')\n", " # розовые деления на оси ОX сверху\n", " tick.tick2line.set_color('pink')\n", " tick.tick2line.set_markeredgewidth(2)\n", " tick.tick2line.set_markersize(25)\n", " # линии вспомогательной сетки для оси OY\n", " tick.gridOn = True\n", " tick.gridline.set_color('yellow')\n", " tick.gridline.set_linewidth(2.)\n", "\n", "save('pic_9_1', fmt='png')\n", "save('pic_9_1', fmt='pdf')\n", " \n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 9.2 Locator и Formatter\n", "\n", "Деления могут быть как главными (major ticks), так и вспомогательными (minor ticks). Работа с делениями в обоих случаях одинаковая.\n", "\n", "Однако, если главные деления будут автоматически созданы при вызове графической команды (например `ax.plot()` или `ax.hist()`), и с ними, соответственно, можно работать c помощью `ax.xaxis.get_major_ticks()` или `ax.yaxis.get_major_ticks()`, то вспомогательные деления необходимо задавать вручную. Удобнее всего это делать с помощью методов Formatter и Locator.\n", "\n", "Методы Locator и Formatter относятся к модулю `matplotlib.ticker`. Этот модуль содержит классы, позволяющие наиболее полно определять форматирование и местоположение делений. Это самый низкоуровневый способ форматирования делений на координатных осях. \n", "\n", "Контейнеры коодинатных осей XAxis и YAxis имеют специальные методы для работы с объектами типа Formatter: `.set_major/minor_locator()` и `.set_major/minor_formatter()`. Например:\n", "\n", "+ `xax.set_major_locator()`;\n", "\n", "+ `xax.set_major_formatter()`;\n", "\n", "+ `yax.set_minor_locator()`;\n", "\n", "+ `yax.set_minor_formatter()`.\n", "\n", "В качестве входящих данных данным методам нужно передать какой-либо экземпляр класса из модуля `matplotlib.ticker`, например, `matplotlib.ticker.MultipleLocator`." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n" ] } ], "source": [ "from matplotlib.ticker import MultipleLocator, FormatStrFormatter\n", "\n", "majorLocator = MultipleLocator(5)\n", "majorFormatter = FormatStrFormatter('%d')\n", "\n", "print(type(majorLocator))\n", "print(type(majorFormatter))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Класс Locator является базовым классом для всех производных классов-локаторов, отвечающих за расположение делений. Локаторы работают с автомасштабированием в пределах области изменения данных, и исходя из этого определяют положение делений на оси. Одним из наиболее удобных является полуавтоматический локатор MultipleLocator. В качестве входящих данных он принимает целое число, например 10, и самостоятельно подбирает пределы изменений на оси и располагает деления в местах, кратных заданному числу. \n", "\n", "Другой пример - субкласс AutoMinorLocator(). Он позволяет автоматически определить положение вспомогательных делений. В качестве входящего параметра даётся целое число n - число промежутков, разделённых вспомогательными делениями, между двумя главными делениями. Это один их самых простых способов задать положение и значения вспомогательных делений. Форматирование подписей к таким делениям (их строковое представление), легче всего осуществить с помощью методов-форматеров. Подробнее о субклассах Locator смотри в электронных материалах.\n", "\n", "Класс Formatter является базовым для всех производных классов-форматеров, отвечающих за форматирование делений. Форматеры в качестве входящих данных принимают строку формата, например \"%d\", которая применяется к подписи каждого деления. Разные субклассы предоставляют разный функционал. Так субкласс NullFormatter() позволяет скрыть все подписи на выбранной оси. Подробнее о субклассах Formatter смотри в электронных материалах." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Пример 9.2.1\n", "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from matplotlib.ticker import MultipleLocator, FormatStrFormatter, AutoMinorLocator, NullFormatter\n", "\n", "majorLocator = MultipleLocator(5)\n", "# Автоматический подбор промежуточных делений. Количество созданных делений равно n-1\n", "minorLocator = AutoMinorLocator(n=3) \n", "\n", "majorFormatter = FormatStrFormatter('%d')\n", "minorFormatter = FormatStrFormatter('%.2f')\n", "\n", "N = 10\n", "x = np.arange(-N, N+1, 1) \n", "y = (np.random.random(len(x))*2.-1)*N\n", "\n", "fig = plt.figure(figsize=(8, 6))\n", "ax = fig.add_subplot(111)\n", "\n", "ax.plot(x, y)\n", "\n", "xax = ax.xaxis\n", "yax = ax.yaxis\n", "\n", "xax.set_major_locator(majorLocator)\n", "xax.set_major_formatter(majorFormatter)\n", "yax.set_major_locator(majorLocator)\n", "yax.set_major_formatter(majorFormatter)\n", "\n", "xax.set_minor_locator(minorLocator)\n", "xax.set_minor_formatter(minorFormatter)\n", "yax.set_minor_locator(minorLocator)\n", "yax.set_minor_formatter(NullFormatter()) # скрываем подписи вспомогательных делений по оси OY\n", "\n", "ax.grid(True, which='major', color='k', linestyle='solid')\n", "\n", "ax.grid(True, which='minor', color='grey', linestyle='dashed', alpha=0.5)\n", "#yax.grid(True, which='minor', color='grey', linestyle='dashed', alpha=0.5)\n", "\n", "#for label in xax.get_ticklabels():\n", "# label.set_color('red')\n", "# label.set_rotation(30)\n", "# label.set_fontsize(12)\n", "\n", "# для вспомогательных for the minor ticks, use no labels; default NullFormatter\n", "\n", "save('pic_9_2_1', fmt='png')\n", "save('pic_9_2_1', fmt='pdf')\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Пример 9.2.2\n", "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from matplotlib.ticker import MultipleLocator, FormatStrFormatter, FixedLocator\n", "\n", "majorLocator = MultipleLocator(5)\n", "majorFormatter = FormatStrFormatter('%d $')\n", "\n", "# FixedLocator позволяет задать последовательность подписей. \n", "# Если множество подписей имеет пересечения с множеством других подписей, то \n", "# они будут перекрываться (случай пересечения главных и вспомогательных делений)\n", "minorLocator = FixedLocator(np.arange(-7.5, 12.5, 5.))\n", "print(type(minorLocator))\n", "minorFormatter = FormatStrFormatter('%.2f')\n", "\n", "N = 10\n", "x = np.arange(-N, N+1, 1) \n", "y = (np.random.random(len(x))*2.-1)*N\n", "\n", "fig = plt.figure(figsize=(8, 6))\n", "ax = fig.add_subplot(111)\n", "\n", "ax.plot(x, y)\n", "\n", "xax = ax.xaxis\n", "yax = ax.yaxis\n", "\n", "xax.set_major_locator(majorLocator)\n", "xax.set_major_formatter(majorFormatter)\n", "yax.set_major_locator(majorLocator)\n", "yax.set_major_formatter(majorFormatter)\n", "\n", "xax.set_minor_locator(minorLocator)\n", "xax.set_minor_formatter(minorFormatter)\n", "yax.set_minor_locator(minorLocator)\n", "yax.set_minor_formatter(minorFormatter)\n", "\n", "ax.grid(True, which='major', color='k', linestyle='solid')\n", "\n", "ax.grid(True, which='minor', color='grey', linestyle='dashed', alpha=0.5)\n", "#yax.grid(True, which='minor', color='grey', linestyle='dashed', alpha=0.5)\n", "\n", "for label in xax.get_ticklabels(which='minor'):\n", " label.set_color('red')\n", " label.set_rotation(30)\n", " label.set_fontsize(12)\n", "\n", "for label in xax.get_ticklabels(which='major'):\n", " label.set_color('blue')\n", " label.set_rotation(-30)\n", " label.set_fontsize(14)\n", " \n", "for tick in yax.get_major_ticks():\n", " tick.label1On = True\n", " tick.label1.set_color('green')\n", " tick.label2On = True\n", " tick.label2.set_color('blue')\n", " # серые деления на оси ОY слева\n", " tick.tick1line.set_color('green')\n", " tick.tick1line.set_markeredgewidth(2)\n", " tick.tick1line.set_markersize(25) \n", "\n", " tick.tick2line.set_color('blue')\n", " tick.tick2line.set_markeredgewidth(2)\n", " tick.tick2line.set_markersize(25) \n", "\n", "for tick in yax.get_minor_ticks():\n", " tick.label1On = True\n", " tick.label1.set_color('green')\n", " tick.label2On = True\n", " tick.label2.set_color('blue')\n", " # серые деления на оси ОY слева\n", " tick.tick1line.set_color('green')\n", " tick.tick1line.set_markeredgewidth(1)\n", " tick.tick1line.set_markersize(12) \n", "\n", " tick.tick2line.set_color('blue')\n", " tick.tick2line.set_markeredgewidth(1)\n", " tick.tick2line.set_markersize(12)\n", "\n", "# для вспомогательных for the minor ticks, use no labels; default NullFormatter\n", "\n", "save('pic_9_2_2', fmt='png')\n", "save('pic_9_2_2', fmt='pdf')\n", "\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Также некоторые элементы форматирования делений и их подписей вынесены в настройки rcParams :\n", "\n", "+ **xtick.color**='k' - цвет делений по оси абсцисс;\n", "\n", "+ **xtick.direction**='in' - направление деления [] по оси абсцисс;\n", "\n", "+ **xtick.labelsize**='medium' - размер подписи деления на оси абсцисс;\n", "\n", "+ **xtick.major.pad**=4.0 - расстояние от координатной оси для главных делений оси абсцисс;\n", "\n", "+ **xtick.major.size**=4.0 - размер главного деления оси абсцисс;\n", "\n", "+ **xtick.major.width**=0.5 - толщина главного деления оси абсцисс;\n", "\n", "+ **xtick.minor.pad**=4.0 - расстояние от координатной оси для вспомогательных делений оси абсцисс;\n", "\n", "+ **xtick.minor.size**=2.0 - размер вспомогательного деления;\n", "\n", "+ **xtick.minor.width**=0.5 - толщина вспомогательного деления;\n", "\n", "+ **ytick.color**='k' - цвет делений по оси ординат;\n", "\n", "+ **ytick.direction**='in' - направление деления [] по оси ординат;\n", "\n", "+ **ytick.labelsize**='medium' - размер подписи деления на оси абсцисс;\n", "\n", "+ **ytick.major.pad**=4.0 - расстояние от координатной оси для главных делений оси ординат;\n", "\n", "+ **ytick.major.size**=4.0 - размер главного деления оси ординат;\n", "\n", "+ **ytick.major.width**=0.5 - толщина главного деления оси ординат;\n", "\n", "+ **ytick.minor.pad**=4.0 - расстояние от координатной оси для вспомогательных делений оси ординат;\n", "\n", "+ **ytick.minor.size**=2.0 - размер главного деления оси ординат;\n", "\n", "+ **ytick.minor.width**=0.5 - толщина главного деления оси ординат." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "Автор: Шабанов Павел Александрович\n", "\n", "E-mail: pa.shabanov@gmail.com\n", "\n", "## Научная графика в Python\n", "\n", "### Оглавление\n", "\n", "+ [Глава 1 Библиотека matplotlib. Pyplot](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P1 Chapter 1 Pyplot.ipynb)\n", "\n", "+ [Глава 2 Основные графические команды](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P1 Chapter 2 Main graphical commands.ipynb)\n", "\n", "+ [Глава 3 Работа с текстом и шрифтами](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P1 Chapter 3 Text and Fonts.ipynb)\n", "\n", "+ [Глава 4 Цвет и цветовая палитра](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P1 Chapter 4 Color.ipynb)\n", "\n", "**Часть II Структура рисунка в matplotlib**\n", "\n", "+ [Глава 5 Рисунок](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P2 Chapter 5 Figure container.ipynb)\n", "\n", "+ [Глава 6 Область рисования](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P2 Chapter 6 Axes container.ipynb)\n", "\n", "+ [Глава 7 Мультиоконные рисунки](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P2 Chapter 7 Subplots.ipynb)\n", "\n", "+ [Глава 8 Координатные оси](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P2 Chapter 8 Axis container.ipynb)\n", "\n", "> + [Глава 9 Деления координатных осей](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P2 Chapter 9 Ticks container.ipynb)\n", "\n", "**Часть III Специальные элементы рисунка в matplotlib**\n", "\n", "+ [Глава 10 Особенности координатных осей](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P3 Chapter 10 Twinx and log scale.ipynb)\n", "\n", "+ [Глава 11 Графики в полярной системе координат](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P3 Chapter 11 Polar plots.ipynb) \n", "\n", "+ [Глава 12 Легенда](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P3 Chapter 12 Legends.ipynb)\n", "\n", "+ [Глава 13 Цветовая шкала](http://nbviewer.ipython.org/github/whitehorn/Scientific_graphics_in_python/blob/master/P3 Chapter 13 Colorbar.ipynb)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python [default]", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.13" } }, "nbformat": 4, "nbformat_minor": 0 }