plt axis что это
4. Основные компоненты matplotlib
MPL очень большая библиотека, но по своей сути она состоит из небольшого количества базовых компонентов:
Каждая область Axes содержит XAxis и YAxis. Они содержат, деления, метки и прочие вспомогательные атрибуты. В Этом уроке мы будем контролировать тики, метки и пределы данных через другие механизмы, поэтому подробно рассматривать оси мы не будем.
4.1. Начало работы
Давайте попробуем выполним следующий код:
В том что Figure и Axes это разные области можно легко убедиться если изменить их цвет:
Кстати, Axes должна принадлежать только одной области Figure. Как правило, всегда сначала создается область Figure, а затем с помощью add_subplot() в Figure размещается одна или несколько областей Axes.
Затем нажатием клавиши стрелка вниз найдите метод set_facecolor и нажмите Enter:
После этого останется только добавить цвет в виде строки ( ‘green’ ) и все.
Тоже самое мы можем проделать и с Axes. Кстати, именно Axes вам придется видоизменять чаще всего, поэтому давайте установим побольше параметров для данной области:
Хотя мы могли бы выполнить это более коротким способом:
Данный способ хорош если вы обладаете некоторым опытом и помните имена всех параметров наизусть. Новичкам я все-таки рекомендую явный способ установки параметров: так и быстрее (благодаря автодополнению) и очевиднее.
В таких случаях первый способ, снова, кажется более простым. Но все же второй способ позволяет создавать код который легко понять и в котором легко ориентироваться, а это тоже очень дорогого стоит.
4.2. Отображение данных на графике
Давайте построим простой график на котором будет присутствовать отображение одних данных точками, а других линиями:
Нарисованные данные так же поддерживают самые разные параметры внешнего вида:
4.3. Методы Axes и pyplot
Но мы больше не будем так делать, потому что «Явное лучше чем неявное». Нет, если мы строим так сказать «одноразовые графики» с небольшими скриптами, только ради того что бы что-то быстро визуализировать, то от краткости скриптов мы только выигрываем. Однако, если нам придется работать с несколькими областями Axes или придется создавать большие скрипты для построения сложной графики, то использование явных определений Figure и Axes сделает код более очевидным и понятным, пускай даже за счет увеличения его объема.
4.4. Несколько Axes на одной Figure
В этом примере, так же как и раньше, мы сначала создали область Figure, а затем с помощью команды fig.add_subplot() начали добавлять, одну за другой область Axes (ax_1, ax_2, ax_3, ax_4). Причем заметьте, каждая область Axes является независимой от других, то есть на на них могут быть нарисованы самые разные графики и установлены самые разные параметры внешнего вида.
Индексирование полученных ячеек начинается с левого верхнего угла, выполняется построчно слева-направо и заканчивается в правом нижнем углу:
Заполнять областями Axes всю область Figure не обязательно:
Каждый отдельный вызов add_subplot() выполняет разбивку Figure, так как как указано в его параметрах и не зависит от предыдущих разбиений:
Такое поведение метода add_subplot() позволяет располагать графики как вам необходимо. Области Axes могут перекрывать друг-друга, быть разного размера или разделенными некоторым пространством, впрочем, как и размещаться в произвольных местах:
4.5. subplots()
Конечно, такой способ размещения некоторого количества областей Axes на Figure довольно гибок, но на практике функция plt.subplots(nrows, ncols) оказывается гораздо удобнее:
Если вглядеться в вывод, то становится видно, что plt.subplots(nrows, ncols) создает кортеж из двух элементов:
Для дальнейшей работы с данными областями нам необходимо распаковать данный кортеж, что мы и делаем в строке:
Но если для каждой области нам необходимо установить одинаковые параметры, то это можно сделать в цикле:
Хотя, зачастую, даже заголовки можно установить в том же самом цикле:
По умолчанию количество строк и столбцов в методе subplots равно 1, что удобно для быстрого создания Figure с одной областью Axes:
Библиотека Matplotlib в Python
Библиотека matplotlib в Python помогает нам отображать данные на графиках в простейшем виде. Если вы знакомы с построением графиков в MATLAB, то Matplotlib будет легко использовать для базового построения графиков.
Чтобы начать понимать, как Matplotlib помогает нам строить графики и фигуры визуализации для представления данных, нам нужно знать некоторые из основных терминов, которые мы будем часто использовать в этом посте. Давайте сначала изучим эти термины.
Терминология
Установка Matplotlib
Библиотеку matplotlib легко установить с помощью pip:
Теперь мы готовы создать несколько примеров, используя эту библиотеку визуализации данных.
Начало работы
Линейный график
Мы начнем с очень простого примера построения графика. Мы просто будем использовать два списка Python в качестве источника данных для точек графика. Напишем для этого фрагмент кода:
Диаграмма рассеяния
Вышеупомянутый график показывал точки, которые фактически не были переданы в массиве, поскольку он показывает линию. Что, если мы хотим видеть только фактические точки на графике? Диаграмма разброса достигает этого:
Гистограммы
В этом разделе мы познакомим вас с гистограммами. В то время как графики информируют нас о том, как меняются наши данные, гистограмма описывает, как наши данные распределяются. Чем больше значений в диапазоне, тем выше полоса диапазона.
Мы используем функцию hist() для построения гистограммы. У него есть 2 важных параметра:
Продемонстрируем это с помощью фрагмента кода:
Настройка Plot
Если вы заметили первый график Line, мы увидим, что ось Y не начинается с 0. Мы можем изменить это:
Рисование нескольких кривых
Совершенно распространено рисование нескольких кривых на одном графике для сравнения. Попробуем вот это:
Изменение цвета и добавление надписи на графике
Как мы видели, кривые выглядят красиво, но разве все они не так похожи? Что, если мы хотим изменить их цвет и показать, что представляет каждый цвет? Попробуем вместе нарисовать синусоидальную и косинусную кривые:
Создание гистограммы
Мы можем создавать привлекательные гистограммы с помощью простого фрагмента кода:
Создание круговой диаграммы
Мы можем создавать привлекательные круговые диаграммы с помощью простого фрагмента кода:
Создание тепловых карт
Графики – это круто, но когда дело доходит до визуализации географической информации, нет ничего лучше, чем тепловая карта:
Построение графиков в Python при помощи Matplotlib
Картиной можно выразить тысячу слов. В случае с библиотекой Python matplotlib, к счастью, понадобится намного меньше слов в коде для создания качественных графиков.
Однако, matplotlib это еще и массивная библиотека, и создание графика, который будет выглядеть «просто, нормально» обычно проходит через путь проб и ошибок. Использование однострочных линий для создания базовых графиков в matplotlib – весьма просто, но умело пользоваться остальными 98% библиотеки может быть сложно.
Эта статья – руководство для пользователей Python на начальном-среднем уровне по matplotlib, с использованием как теории, так и практических примеров. Обучение по практическим примерам может быть очень продуктивным, и дает возможность получить представление даже на поверхностном уровне понимания внутренней работы и макета библиотеки.
Что мы рассмотрим?
Эта статья подразумевает, что пользователь имеет хотя-бы минимальное представление о NumPy. Мы в основном будем пользоваться модулем numpy.random для создания «игрушечных» данных, рисовать примеры из различных статистических источников.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Если у вас еще не установлен matplotlib, рекомендуем ознакомиться с руководством по установке, перед тем как продолжить.
Почему Matplotlib может быть сложным?
Изучение matplotlib временами может быть тяжелым процессом. Проблема не в нехватке документации (которая весьма обширная, между прочим). Сложности могут возникнуть со следующим:
Так что, перед тем как мы перейдем к сложным примерам, не помешает освоить корневые концепции дизайна matplotlib.
Pylab: что это и нужно ли мне это?
Немножко истории: Нейробиолог Джон Д. Хантер начал разрабатывать matplotlib в 2003 году, в основном вдохновляясь эмуляцией команд программного обеспечения Mathworks MATLAB. Джон отошел в мир иной трагически рано, в возрасте 44 лет в 2012 году, и matplotlib на сегодняшний день является целиком и полностью продуктом сообщества: развивается и поддерживается множеством людей. (Джон говорил об эволюции matplotlib на конференции SciPy в 2012, которую однозначно стоит посмотреть.)
Одной из важных особенностей MATLAB является его глобальный стиль. Концепция импорта Python не сильно используется в MATLAB, и большинство функций MATLAB легко доступны для пользователя на верхнем уровне.
Заказать свой собственный уникальный номер можно от Сим-Трейд.ру. Быстрая доставка в день заказа и красивые номера начиная от 300 руб. с выгодным тарифным планом. Свой уникальный номер это хороший признак для введения бизнеса с момента первого звонка.
Понимание того, что корни matplotlib растут из MATLAB, помогает объяснить существование pylab. pylab – это модуль внутри библиотеки matplotlib, который был встроен для подражания общего стиля MATLAB. Он существует только для внесения ряда функций классов из NumPy и matplotlib в пространство имен, что упрощает переход пользователей MATLAB, которые не сталкивались с необходимостью в операторах импорта. Бывшие пользователи MATLAB (которые очень хорошие люди, обещаем!) полюбили его функционал, потому что при помощи from pylab import * они могут просто вызывать plot() или array() напрямую также, как они это делали в MATLAB.
Проблема здесь может быть очевидной для некоторых пользователей Python: использование from pylab import * в сессии или скрипте – как правило, плохая идея. Matplotlib сегодня прямым текстом рекомендуют не делать этого в своих руководствах:
[pylab] все еще существует по историческим причинам, но его использование не рекомендуется. Он перегружает пространства имен функциями, которые оттеняют надстройки Python и может привести к скрытым багам. Для получения интеграции IPython без использования импортов, рекомендуется использовать %matplotlib.
В глубине своей, существует целая тонна потенциально конфликтных импортов, замаскированных в коротком источнике pylab. Фактически, использование ipython —pylab (из терминала или командной строки) или %pylab (из инструментов IPython/Jupyter) легко вызывает from pylab import *
Суть в том, что matplotlib забросили этот удобный модуль и рекомендуют не использовать pylab, подтверждая ключевое правило Python – явное лучше, чем неявное.
Без необходимости в использовании pylab, мы всегда можем обойтись всего одним каноничным импортом:
Как строить графики с Pyplot / plt 2
pyplot является зависимым от состояния ( stateful ). Он отслеживает статус объекта Figure и его области построения. Функции выполняются на текущем объекте.
Простой интерактивный график
Для знакомства с библиотекой matplotlib и с самим pyplot начнем создавать простой интерактивный график. В matplotlib эта операция выполняется очень просто. Достаточно трех строчек кода.
В Python конструкторы обычно не нужны. Все определяется неявно. Так, при импорте пакета уже создается экземпляр plt со всеми его графическими возможностями, который готов к работе. Нужно всего лишь использовать функцию plot() для передачи функций, по которым требуется построить график.
Поэтому достаточно передать значения, которые нужно представить в виде последовательности целых чисел.
Результат должен соответствовать показанному на изображении. Он будет отображаться в окне, которое называется plotting window с панелью инструментов. Прямо как в MATLAB.
Окно графика
В этом окне есть панель управления, состоящая из нескольких кнопок.
Код в консоли IPython передается в консоль Python в виде набора команд:
Если функции plt.plot() передать только список или массив чисел, matplotlib предположит, что это последовательность значений y на графике и свяжет ее с последовательностью натуральных чисел x: 0, 1, 2, 3, ….
Свойства графика
На последнем изображении точки были представлены синей линией. Если не указывать явно, то график возьмет настройку функции plt.plot() по умолчанию:
Для получения настоящего графика, где каждая пара значений ( x, y ) будет представлена в виде красной точки, нужно поменять это представление.
Если же вы используете Jupyter QtConsole, то для каждой введенной команды будет появляться новый график.
в будущем в примерах средой разработки будет выступать IPython QtConsole.
в IPython QtConsole для создания графика иногда нужно ввести несколько строк команд. Чтобы график при этом не генерировался с каждым нажатием Enter (перевод на новую строку), необходимо нажимать Ctrl + Enter. А когда график будет готов, остается лишь нажать Enter дважды.
На следующем изображении видно, как новые настройки делают график более читаемым. Так, конечные точки набора данных теперь распределены по графику, а не находятся на краях. А сверху есть заголовок.
matplotlib и NumPy
Даже matplot, которая является полностью графической библиотекой, основана на NumPy. Вы видели на примерах, как передавать списки в качестве аргументов. Это нужно как для представления данных, так и для того, чтобы задавать границы осей. Внутри эти списки конвертируются в массивы NumPy.
Таким образом можно прямо добавлять в качестве входящих данных массивы NumPy. Массив данных, обработанный pandas, может быть использован matplotlib без дальнейшей обработки.
Как видно на прошлом изображении, график представляет три разных тренда с помощью разных цветов и меток. В таких случаях когда тренд функции очевиден, график является не самой подходящим представлением — лучше использовать линии. Чтобы разделить их не только цветами, можно использовать паттерны, состоящие из комбинаций точек и дефисов.
если вы не пользуетесь IPython QtConsole со встроенной matplotlib или работаете с этим кодом в обычной сессии Python, используйте команду plt.show() в конце кода для получения объекта графика со следующего изображения.
Использование kwargs
В качестве примера с помощью аргумента linewidth можно поменять толщину линии.
Работа с несколькими объектами Figure и осями
До сих пор во всех примерах команды pyplot были направлены на отображение в пределах одного объекта. Но matplotlib позволяет управлять несколькими Figure одновременно, а внутри одного объекта можно выводить подграфики.
Работая с pyplot, нужно помнить о концепции текущего объекта Figure и текущих осей (графика на объекте).
Дальше будут отображаться тренды синусоиды (синус и косинус), и лучше всего разделить полотно по вертикали на два горизонтальных подграфика. В график передают числа 211 и 212.
Теперь — то же самое для двух вертикальных подграфиков. Передаем в качестве аргументов 121 и 122.
Добавление элементов на график
Чтобы сделать график более информативным, недостаточно просто представлять данные с помощью линий и маркеров и присваивать диапазон значений с помощью двух осей. Есть и множество других элементов, которые можно добавить на график, чтобы наполнить его дополнительной информацией.
В этом разделе добавим на график текстовые блоки, легенду и так далее.
Добавление текста
количество команд для представления графика постоянно растет. Но их не нужно переписывать каждый раз. Достаточно использовать стрелки на клавиатуре, вызывая раннее введенные команды и редактируя их с помощью новых строк (в тексте они выделены жирным).
Теперь добавим две метки на график. Они будут описывать тип значений на каждой из осей.
Благодаря ключевым словам можно менять характеристики текста. Например, можно поменять заголовок, выбрав другой шрифт и увеличив его размер. Также можно менять цвета меток осей, чтобы акцентировать внимание на заголовке всего графика.
Первые два аргумента — это координаты, в которых нужно разметить текст. s — это строка с текстом, а fontdict (опционально) — желаемый шрифт. Разрешается использовать и ключевые слова.
Добавим метку для каждой точки графика. Поскольку первые два аргумента в функции являются координатами, координаты всех точек по оси y немного сдвинутся.
Теперь у каждой точки есть своя метка.
Поскольку matplotlib — это графическая библиотека, созданная для использования в научных кругах, она должна быть способна в полной мере использовать научный язык, включая математические выражения. matplotlib предоставляет возможность интегрировать выражения LaTeX, что позволяет добавлять выражения прямо на график.
Также разрешается использовать ключевые слова, чтобы дополнить текст графика. Например, можно добавить формулу, описывающую тренд и цветную рамку.
Добавление сетки
Также на график можно добавить сетку. Часто это необходимо, чтобы лучше понимать положение каждой точки на графике.
Добавление легенды
Также на графике должна присутствовать легенда. pyplot предлагает функцию legend() для добавления этого элемента.
В функцию нужно передать строку, которая будет отображаться в легенде. В этом примере текст First series характеризует входящий массив данных.
По умолчанию легенда добавляется в правом верхнем углу. Чтобы поменять это поведение, нужно использовать несколько аргументов-ключевых слов. Так, для выбора положения достаточно передать аргумент loc со значением от 0 до 10. Каждая из цифр обозначает один из углов. Значение 1 — значение по умолчанию, то есть, верхний правый угол. В следующем примере переместим легенду в левый верхний угол, чтобы она не пересекалась с точками на графике.
Код положения | Положение |
---|---|
0 | лучшее |
1 | Верхний правый угол |
2 | Верхний левый угол |
3 | Нижний левый угол |
4 | Нижний правый угол |
5 | Справа |
6 | Слева по центру |
7 | Справа по центру |
8 | Снизу по центру |
9 | Сверху по центру |
10 | По центру |
Сохранение графиков
В этом разделе разберемся, как сохранять график разными способами. Если в будущем потребуется использовать график в разных Notebook или сессиях Python, то лучший способ — сохранять графики в виде кода Python. С другой стороны, если они нужны в отчетах или презентациях, то подойдет сохранение в виде изображения. Можно даже сохранить график в виде HTML-страницы, что пригодится при работе в интернете.
Сохранение кода
В этом примере сохранить весь код, отвечающий за формирование графика, можно с помощью ввода со строки 171.
После запуска команды файл my_first_chart.py окажется в рабочей директории.
Позже, когда вы откроете сессию IPython, у вас уже будет готовый график и его можно редактировать с момента сохранения этой командой:
в определенных случаях последняя команда будет работать только после ввода двух предыдущих.
Сохранение сессии в HTML-файл
С помощью IPython QtConsole вы можете конвертировать весь код и графику, представленные в текущей сессии, в одну HTML-страницу. Просто выберите File → Save to HTML/XHTML в верхнем меню.
Будет предложено сохранить сессию в одном из двух форматов: HTML и XHTML. Разница между ними заключается в типе сжатия изображения. Если выбрать HTML, то все картинки конвертируются в PNG. В случае с XHTML будет выбран формат SVG.
Сохранение графика в виде изображения
Файл появится в рабочей директории. Он будет называться my_chart.png и включать изображение графика.
Обработка значений дат
Одна из основных проблем при анализе данных — обработка значений дат. Отображение даты по оси (обычно это ось x ) часто становится проблемой.
Возьмем в качестве примера линейный график с набором данных, который включает 8 точек, где каждая представляет точку даты на оси x в следующем формате: день-месяц-год.
Автоматическая расстановка отметок в этом случае — настоящая катастрофа. Даты сложно читать, ведь между ними нет интервалов, и они наслаиваются друг на друга.
Задав все эти изменения, можно получить график как на следующем изображении.