Установка пакета и основные возможности

Почти все, кто использует язык Python в научных целях, сталкивались с двумя очень удобными и популярными пакетами:

  • numpy – для быстрой обработки матриц и векторов, а также эффективных вычислений на уровне многочисленных математических функций;
  • matplotlib – для построения и отображения графиков самых разных форм и размеров.

Эти два пакета полностью покрывают базовые потребности при научных расчетах и визуализации данных. Я бы даже сказал, что они, своего рода, «убийцы» известного математического пакета MatLab. Так как Python гораздо лучше работает с большими массивами данных и, кроме того, полностью бесплатный. Тогда как за MatLab в недалеком прошлом приходилось платить аж целых 2000$.

Вероятно, разработчики пакетов numpy и matplotlib также активно использовали MatLab, так как попытались сохранить некоторый синтаксис этого математического пакета. Вместе с тем и numpy и matplotlib использую концепцию ООП, что значительно упрощает работу с ними при разработке больших проектов.

Пакет numpy мы с вами уже рассматривали и, если кто не смотрел этот плейлист, то вот ссылка на него:

https://www.youtube.com/watch?v=eDuuKvIWzew&list=PLA0M1Bcd0w8zmegfAUfFMiACPKfdW4ifD

А, начиная с этого занятия, мы будем изучать второй пакет – matplotlib. Конечно, я затрону лишь основной функционал, покажу базовые возможности этого пакета, которых, впрочем, будет достаточно, наверное, в 80-90% случаев. Все детали рассматривать нет смысла, тогда занятия просто превратятся в большой видео-справочник, который будет сложно воспринимать. Да и смысла большого в таком изложении нет. Если потребуются реализовать какие-то редкие нюансы, то это проще посмотреть или в интернете или в официальной документации по ссылке:

https://matplotlib.org/stable/contents.html

Кстати, полная документация занимает более 3000 страниц. Так что можете представить, во что превратились бы уроки подробного изложения возможностей matplotlib. Большинству это ни к чему и я буду исходить из среднестатистических потребностей в визуализации данных на графиках.

Установка пакета matplotlib

Как всегда, все начинается с установки. Сделать это очень просто, достаточно в терминале выполнить команду:

pip install matplotlib

и пакет со всеми зависимостями будет установлен. Также можно зайти в репозиторий:

https://pypi.org

набрать в поиске matplotlib и появится список доступных пакетов. По умолчанию, устанавливается последняя версия.

Согласно документации:

https://matplotlib.org/stable/contents.html

для полноценной работы matplotlib устанавливаются следующие пакеты (зависимости):

  • NumPy (>= 1.15)
  • setuptools
  • cycler (>= 0.10.0)
  • dateutil (>= 2.1)
  • kiwisolver (>= 1.0.0)
  • Pillow (>= 6.2)
  • pyparsing (>=2.0.3)

И если с помощью команды «pip list» вывести список пакетов, то среди них должны быть и приведенные в списке.

Бекэнд matplotlib

Так как matplotlib выводит графическую информацию, как правило, на экран устройства, то он должен использовать пакет для работы с пользовательским интерфейсом. И, действительно, по умолчанию в качестве backend применяется модуль:

TkInter

который, как правило, поставляется с самим языком Python. И мы в этом можем убедиться. Давайте создадим простейшую программу и, заодно проверим корректность установки matplotlib:

import matplotlib
 
print(matplotlib.get_backend())

Мы здесь импортировали модуль matplotlib и вызвали функцию get_backend() для получения информации о текущем выбранном backend’е. У меня в консоли выводится строка:

TkAgg

означающая, что выбран TkInter в качестве backend’а. Если у вас по каким-то причинам не установлен TkInter, то могут возникнуть проблемы при отображении графиков. Если же мы хотите выбрать другой backend, то для этого следует выполнить команду:

matplotlib.use('Qt5Agg')

В данном случае указан пакет Qt версии 5 для отображения графической информации. Также backend можно «жестко» прописать в файле конфигурации пакета matplotlib, чтобы каждый раз в программе не вызывать функцию use().

Вообще, поддерживаются следующие backend’ы:

Название

Описание

Qt5Agg

Рендеринг графики в Qt5 (требуется PyQt5). В IPython активируется командой %matplotlib qt5

ipympl

Рендеринг графики в виджете Jupyter (требуется ipympl). В IPython активируется командой %matplotlib ipympl

GTK3Agg

Рендеринг графики в GTK 3.x (требуется PyGObject и pycairo или cairocffi). В IPython активируется командой %matplotlib gtk3

macosx

Рендеринг графики в Cocoa. В IPython активируется командой %matplotlib osx

TkAgg

Рендеринг графики в Tk (требуется TkInter). В IPython активируется командой %matplotlib tk

nbAgg

Рендеринг графики в Jupyter notebook. В Jupyter активируется командой %matplotlib notebook

WebAgg

Для использования с торнадо-сервером.

GTK3Cairo

Cairo рендеринг графики в GTK 3.x x (требуется PyGObject и pycairo или cairocffi).

Qt4Agg

Рендеринг графики в Qt4 (требуется PyQt4 или pyside). В IPython активируется командой %matplotlib qt4

wxAgg

Рендеринг графики в wxWidgets (требуется wxPython 4). В IPython активируется командой %matplotlib wx

Мы будем пока использовать стандартный модуль TkInter, чтобы не усложнять наши программы.

Архитектура окна графика

Давайте теперь сформируем простой график и отобразим его в окне. Для этого нам нужно импортировать специальный модуль pyplot пакета matplotlib:

import matplotlib.pyplot as plt

Обычно ему присваивается алиас plt для дальнейшего удобства использования. Далее, мы воспользуемся функцией plot() для отображения простейшей кривой:

plt.plot([1, 2, -6, 0, 4])

В принципе, этого достаточно, чтобы график был сформирован и отображен. Но при работе в интегрированных средах, вроде PyCharm, окно с графиком тут же закроется. Чтобы этого не происходило, добавим вызов еще одной функции:

plt.show()

Теперь мы видим окно с графиком и элементами управления. Программа продолжит свою работу только после закрытия этого окна.

Чтобы в дальнейшем уметь управлять этим графиком, нужно понимать из каких компонент он состоит.

Или, это можно представить в виде схемы взаимодействия между компонентами окна:

На этом рисунке показаны лишь базовые элементы графика. В действительности, их несколько больше, но мы начнем с них. Итак, в основе всего лежит фигура (Figure) и она одна для текущего окна. Затем, на фигуре располагаются координатные оси (Axes). Таких осей (объектов Axes) может совсем не быть, но, как правило, имеется хотя бы одна область. Также можно добавлять две, три и так далее координатных осей на одну фигуру:

 

Каждый объект Axes содержит две или три координатные оси (Axis), сетку, метки (ticks), легенду и, конечно же, графики. Причем число графиков может быть произвольным – от нуля и до любого разумного числа.

Объект Artist отвечает за размещение и оформление отображаемых данных на рисунке (Figure) и взаимодействует непосредственно с объектом Canvas – подложки для рисования на холсте (рисунке).

Оси Axis в matplotlib могут иметь разные конфигурации:

  • в виде декартовой системы на плоскости (2D) или в пространстве (3D);
  • использовать логарифмический масштаб по каждой из осей;
  • описывать сферическую систему координат.

Основные возможности matplotlib

С помощью matplotlib можно отображать произвольные данные самыми разными способами в виде:

Наконец, matplotlib позволяет создавать анимации отображаемых данных и сохранять их, например, в анимированных GIF-файлах. Все это и сделало данный пакет таким популярным и удобным в самых разных приложениях, где необходимо отображать данные и визуально оценивать полученный результат.