Matplotlib – популярная библиотека Python, используемая разработчиками для визуализации информации и анализа данных. Она применяется при создании:
- линейных графиков;
- круговых диаграмм;
- построчных гистограмм и других.
Далее предстоит научиться импортировать библиотеку, а также рассмотреть на ее примере ключевые способы виртуализации.
Matplotlib – это…
Matplotlib – это пакет виртуализации данных в Python. Он поддерживает работу с информацией сразу на нескольких уровнях:
- Через модуль Pyplot. Он будет рассматривать имеющийся график в качестве единого целого.
- При помощи объектно-ориентированного интерфейса. В нем каждая фигура/ее часть рассматривается в виде отдельного объекта. Такая концепция позволяет выборочно изменять их свойства, а также отображение.
Matplotlib – инструмент, поддерживающий работу с двумерной и трехмерной графикой. Он написан и поддерживался Джоном Хантером. Изначально распространялся под BSD-подобной лицензией. Его создание – это результат подражания графическим командам MATLAB.
Последняя поддерживаемая стабильная версия Matplotlib – 2.1.1 Для нее потребуется:
- Python 2.7 версии или новее 3.4;
- NumPy – от 1.7.1 версии и выше.
Далее предстоит работать с Matplotlib to Pyplot. Информация, представленная в статье, больше подходит тем, кто имеет хотя бы малейшее представление о NumPy. В основном предстоит пользоваться модулем numpy.random, который позволяет получать «тестовые» данные, а также рисовать примеры из источников статистического характера.
Где используется
Matplotlib – это инструмент to data visualization. с его помощью можно представить информацию любой сложности в простом и понятном виде. Библиотека дает возможность не только формировать различные графики, но и комбинировать их.
При помощи дополнительных библиотек удается расширить стандартные возможности по анализу данных. Пример – модуль Cartopy. Он позволит работать с картографическими информационными единицами.
Matplotlib – это не просто готовое решение для графиков и визуализации. Библиотека является основной to других библиотек. Пример – Seaborn. Он упрощает процедуру построения графиков, обладает большим спектром возможностей для косметического улучшения внешнего вида выводимых результатов. В его основе заложена рассматриваемая библиотека. Она является незаменимым инструментом анализа информации.
Спектр возможностей
Matplotlib – это гибкий, легко конфигурируемый пакет. Он совместно с three libraries: SciPy, IPython и NumPy предоставляет функционал, сравнимый to Matlab. Сейчас он работает с несколькими графическими библиотеками, в состав которых включены PyGTK и wxWindows.
Поддерживает:
- графики;
- гистограммы и столбчатые диаграммы;
- диаграммы рассеяния;
- круговые диаграммы;
- диаграммы стебель-листья;
- градиентные поля;
- контурные графики;
- спектральные диаграммы.
Пользователи здесь смогут указывать не только координатные оси. В пакете поддерживаются надписи и пояснения, возможность использования логарифмических шкал, полярные координат.
Для трехмерной графики рекомендуется перейти to toolkit mplot3d. Существуют иные наборы инструментов для выполнения разных задач: для картографии, работы с Excel, для GTK.
В Matplotlib поддерживается возможность создания анимированных объектов. На первых порах соответствующий функционал не требуется. Им пользуются в единичных случаях.
Форматы изображений
При помощи рассматриваемой библиотеки пользователи смогут работать to graphics. Набор поддерживаемых форматов изображений может быть получен из словаря под названием FigureCanvasBase.filetypes. Наиболее распространенными форматами to Matplotlib Python служат:
- PNG;
- EMF;
- JPEG;
- PostScript;
- PDF;
- EPS;
- SVG и SVGZ;
- TIFF;
- RGBA.
Опираясь на пакетные классы допустимо создание других модулей. Пример – инструмент для генерирования искрографиков.
Связь с PyLab и Pyplot
При изучении рассматриваемой библиотеки можно встретить два модуля – to Pyplot и Pylab. Необходимо понимать, когда и какой вариант использовать в работе. Здесь необходимо запомнить следующее:
- Matplot – это специальный пакет для визуализации информации в Python.
- Pyplot – модуль, включенный to Matplot. Он отображается в программном коде в виде matplotlib.pyplot. Используется для автоматического создания осей, фигур и иных элементов без погружения в логику происходящего.
- Pylab – тоже включенный to Matplot модуль. Он устанавливается совместно с библиотекой. Одновременно импортирует Pyplot и NumPy для дальнейшей работы с массивами в интерактивной форме. Позволяет при использовании информации получать доступ к функциям, отвечающим за черчение.
Pylab – это пакет, который на практике в Matplot library почти не встречается. Раньше он использовался для облегчения перехода с Matlab to Matplot. Данный инструмент позволял обходиться без операторов импорта. Наиболее распространенным модулем выступает Pyplot.
Несколько слов о терминологии
Перед началом использования популярной library Питона предстоит запомнить несколько определений. Они помогут быстрее разобраться с исходными кодами предлагаемых примеров:
- Axes – область отображения информации. Может быть помечена как ось X, ось Y и так далее.
- Spines – линии, соединяющие точки Axes.
- Figure – законченное окно или страница. На соответствующем элементе располагается итоговый график.
Запомнить эти простые определения должен каждый разработчик. В противном случае интерпретация исходного кода to Python будет затруднена.
Начало работы
Matplot – универсальный инструмент, работающий через Питон на Windows, MacOS и Linux. Если программист использует Jupiter Notebook или Google Collab, дополнительная инициализация ни Python, ни рассматриваемого пакета не потребуется: они уже встроены в систему.
Установка
Чтобы написать исходный код to любой IDE (пример – в Visual Studio Code), необходимо сначала установить Python, а после – библиотеку Learn при помощи терминала:
Теперь можно приступить к непосредственному импорту Matplot:
Plt – это общепринятое сокращение. Оно встречается не только в учебниках, но и в официальной документации Питона.
Иерархия объектов
Ключевая особенность изучаемого инструмента – это наличие иерархии объектов. Под ней подразумевается, что каждый график будет основываться на древоподобную структуру элементов пакета.
Самым важным является объект Figure. Он представляет собой внешний контейнер to графики Matplot. Включает в себя несколько Axes в случае необходимости. Под «осями» понимаются настоящие графики.
Объект Figure – это своеобразный «ящик» для нескольких Axes. В порядке иерархии под «осями» располагаются элементы меньшего размера. К ним относят:
- отдельно изображенные линии;
- легенды;
- отметки;
- тестовые боксы.
Каждый компонент диаграммы – это собственный манипулируемый элемент to Python, вплоть до отметок и ярлыков.
Выше – наглядный пример иерархии в действии.
Линейный график
Далее работу с Matplotlib и его libraries предстоит рассматривать на основе наглядных примеров. Это поможет лучше усвоить информацию тем, кто ранее не работал с NumPy и Pyplot.
В качестве простого примера необходимо изобразить линейный график. Для него потребуется создать переменные – x и y. Они содержат координаты точек to оси x и y соответственно:
Теперь необходимо построить график, соединяющий заданные точки:
Выше – результат обработки соответствующего кодового фрагмента. В нем:
- plt.plot – это стандартная функция построения графика в соответствии с заданными значениями;
- plt.show() – команда, отвечающая за вывод визуализированной информации на экран (может отсутствовать).
Если не использовать show(), вместо красивого графического отображения линейного графика пользователь увидит разнообразную техническую информацию.
Теперь получившийся результат можно дополнить для удобства заголовком, а также подписями имеющихся осей:
Через Matplotlib допускается настройка отображения любых графиков. Пример – изменение цвета линии, выделение точек, координаты которых изначально были заданы разработчиком:
Выше – пример того, что получится, если внести соответствующие изменения to code. Заданные точки хорошо заметны, а их цвет, как и линии, изменился. Он стал зеленым.
Диаграммы рассеяния
Рассмотренный ранее пример показывал точки, которые не были переданы в массиве. Из-за этого получилось линейное отображение данных. В Matplotlib можно сформировать диаграмму рассеяния. Она необходима тогда, когда требуется оценить взаимосвязь одной переменной to другой. Их значения будут откладывать по разным осям.
В Matplotlib для построения диаграммы рассеяния необходимо прибегнуть to plt.scatter(). Эта функция будет в качестве аргументов принимать переменные с дискретными значениями:
Обработанный код будет выглядеть так:
Диаграмма рассеяния – это множество отдельно взятых точек на координатной плоскости.
Гистограммы
Еще один популярный и удобный метод to visualization – это столбчатые диаграммы (или гистограммы). Графики будут информировать пользователя о том, как меняются исходные данные. Гистограммы работают иначе. Они используются для отображения принципов распределения информации. Чем больше в диапазоне значений, тем выше окажется получившаяся полоса. Соблюдается полная пропорциональность.
Обычно при работе с гистограммами одна из осей отображает одну категорию, вторая соответствует ее дискретному значению.
Построить гистограмму можно несколькими способами. Первый вариант – это прибегнуть to hist(). Эта функция имеет два ключевых параметра:
- список значений, используемых для построения графика;
- количество диапазонов для распределения соответствующих точек.
Программный код будет выглядеть так:
Ниже – наглядный пример того, как будет выглядеть обработанный код:
А вот – столбчатая диаграмма, используемая для наглядной демонстрации величины прибыли по месяцам. Код будет таким:
А вот результат, выведенный на экран:
Теперь с помощью этой гистограммы можно увидеть динамику изменения прибыли по заданным пользователем месяцам.
Комбинирование
Matplotlib – инструмент, который дает массу возможностей виртуализации информации. В нем допускается объединение сразу нескольких типов графиков. Пример – линейную и гистограмму.
Вот – наглядный пример соответствующего кода. To столбцы гистограммы необходимо добавить точки, указывающие значения прибыли. Далее – соединить их:
На экране появится следующий результат:
Получившийся результат отображает необходимую информацию, но рекомендуется изменить некоторые его настройки. Связано это с тем, что линейную интерпретацию данных на темно-синем фоне видно очень плохо. Для исправления ситуации необходимо увеличить прозрачность гистограммы. За это отвечает параметр alpha.
Alpha может принимать разные значения:
- 0 – полная прозрачность;
- 1 – отсутствие прозрачности.
Значения, расположенные в диапазоне (0;1), указывают на степень прозрачности. Чем выше соответствующий показатель, тем «ярче» будет отображаемый на экране компонент.
Круговые
В Matplotlib можно рисовать круговые диаграммы. Они используются для отображения состава имеющихся групп. Пример – преобладание автомобилей на дорогах того или иного региона:
Выше – наглядный пример элементарной круговой диаграммы в Matplotlib. Информация здесь понятна, но не детализирована. Понять долю, приходящуюся на каждую имеющуюся марку, невозможно.
Исправить ситуацию можно путем добавления to pie параметра autopct:
В этот параметр необходимо передать формат отображения числа. Приведенный пример предписывает работу с целым числом и одним знаком можно запятой. Выше – итоговый результат обработки написанного в Matplotlib фрагмента.
Кривые
Еще один распространенный вариант – это рисование нескольких кривых на одном графике. Такая концепция в основном применяется для сравнения. В программном коде ситуация выглядит так:
Выше – наглядный пример получившегося результата.
Изменения и надписи
Ранее рассмотренные примеры были похожи друг на друга. На самом деле каждая виртуализация информации – это уникальный продукт работы Matplotlib. Он поддерживает возможность настройки цвета линии/точек, а также добавления надписей на график. Для этого используются параметры:
- color= ‘цвет’ – отвечает за выбор цвета, которым будет окрашен компонент;
- label= ‘значение’ – подпись к линиям.
Вот – наглядный пример кода, демонстрирующего изменение параметров элементов виртуализации:
Ниже – то, как это будет выглядеть после непосредственной обработки:
Здесь для улучшения возможности сравнения изменен цвет нарисованных кривых на красный и синий соответственно. В левой верхнем углу добавлены подписи. Они показывают, какой цвет и за какой спектр метаданных будет отвечать.
Тепловая карта
Если разработчик решил прибегнуть to Matplotlib, он получит доступ к совершенно разным инструментам и способам виртуализации. Кроме «стандартных» средств для виртуального отображения информации, здесь поддерживаются тепловые карты.
Это – средство, которое будет незаменимо при работе с географическими данными. Вот – наглядный пример его создания:
Выше – наглядный пример тепловой карты по заданным параметрам. Она может настраиваться по нуждам пользователя.
Сложная визуализация
Matplotlib поддерживает не только тепловые карты, но и достаточно сложные средства виртуализации. В качестве образца будет использоваться столбчатый график с накоплением. Такой компонент позволяет отслеживать соотношение динамику соотношения значений to одной переменной.
Здесь – образец для ситуации с устройствами, работающими на базах Android и Ios.Он поддерживает отслеживание соотношений в разные годы:
Данный способ to virtualize указывает на то, что соотношение устройств, находящихся под управлением Android и iOS постепенно меняется. Андроид-оборудования с течением времени становится на порядок больше.
Вероятные трудности
Matplotlib – функциональный и интересный инструмент. Он предоставляет средства для быстрой и качественной виртуализации, но его изучение может быть затруднено. Официальная документация у Matplotlib достаточно большая. Несмотря на это, сложности возникают по другим причинам:
- Размер библиотеки. Matplotlib сама по себе представлена порядком 70 000 строк кода.
- Вхождение в состав инструмента нескольких интерфейсов (способов для построения фигур на экране). Matplotlib умеет взаимодействовать с огромным количеством бэкендов – они отвечают за то, как фактически отобразятся диаграммы, а не только за внутренние структурные особенности.
- Часть официальной документации устарела. Matplotlib активно развивается. Она дорабатывается и обновляется до сих пор. Некоторые старые примеры из официальной документации и интернет-источников могут включать в себя примерно на 70% меньше программного кода по сравнению с современными версиями.
Несмотря на это, Matplotlib Python – это неплохой инструмент для работы с графиками. Полученные результаты обработки данных используются не только при анализе, но и разнообразных проектах, публикациях, документации.
Как выучить библиотеку
Самостоятельно освоить рассмотренную библиотеку бывает не так просто, особенно если необходимо работать с большими массивами информации. Здесь можно увидеть еще один наглядный образец использования Matplot. В Сети полно туториалов и примеров, а также сопутствующей документации по данному инструменту. Только часть из них устарела, а некоторые требуют значительных познаний в programming.
Лучше всего для быстрого погружения в выбранное направление не заниматься самообразованием, а отдать предпочтение специализированным дистанционным компьютерным курсам. Пример – от образовательного центра OTUS.
Это верный способ выучить не только Matplot, но и любой другой инструмент/фреймворк/библиотеку Питона. На специализированных компьютерных курсах «с нуля» пользователя научат профессионально пользоваться выбранным пакетом.
Дистанционные компьютерные курсы выделяются следующими чертами:
- Сжатые сроки обучения. Каждый курс рассчитан на срок от нескольких месяцев до года.
- Грамотно составленные программы, поданные понятным языком. Можно выбрать направление с учетом ранее приобретенного спектра знаний.
- Разнообразие направлений с возможностью их совмещения. Пользователи смогут учить не только Matplot, но и другие компоненты Питона. При желании – вовсе параллельно изучать совершенно другой язык разработки.
- Интересные домашние задания, многочисленная практика. Все это поможет не только научиться пользоваться инструментом разработки, но с поспособствует формированию качественного первого портфолио.
- Постоянное кураторство. Каждый курс ведется специалистом в том или ином направлении. Наставник всегда придет на помощь.
- Возможность совмещения с обыденной жизнью, основной работой и семьей. Все обучение строится на основании вебинара. Пропущенный урок пользователь сможет в любой момент посмотреть в режиме «онлайн».
При успешном прохождении курса пользователь не только будет знать, что такое for i, int и как работает Matplot, но и получит электронный сертификат для документального подтверждения приобретенных в процессе учебы навыков.
Приглашаем выбрать курс по востребованным IT-направлениям уже сегодня!
<!DOCTYPE html>
<html dir="ltr" lang="ru-RU">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="profile" href="http://gmpg.org/xfn/11" />
<title>Matplotlib: от А до Я OTUS</title>
<!-- All in One SEO 4.5.2.1 - aioseo.com -->
<meta name="description" content="Matplotlib – популярная библиотека Python, используемая разработчиками для визуализации информации и анализа данных. Она применяется при создании: линейных графиков; круговых диаграмм; построчных гистограмм и других. Далее предстоит научиться импортировать библиотеку, а также рассмотреть на ее примере ключевые способы виртуализации. Matplotlib – это… Matplotlib – это пакет виртуализации данных в Python. Он поддерживает работу с информацией" />
<meta name="robots" content="max-image-preview:large" />
<link rel="canonical" href="https://otus.ru/journal/matplotlib-ot-a-do-ya/" />
<meta name="generator" content="All in One SEO (AIOSEO) 4.5.2.1" />
<script type="application/ld+json" class="aioseo-schema">
{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/otus.ru\/journal\/matplotlib-ot-a-do-ya\/#article","name":"Matplotlib: \u043e\u0442 \u0410 \u0434\u043e \u042f OTUS","headline":"Matplotlib: \u043e\u0442 \u0410 \u0434\u043e \u042f","author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2023\/04\/oj-1080x72020-1.jpg","width":2245,"height":1587},"datePublished":"2023-04-09T00:14:20+00:00","dateModified":"2024-01-23T18:42:08+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/otus.ru\/journal\/matplotlib-ot-a-do-ya\/#webpage"},"isPartOf":{"@id":"https:\/\/otus.ru\/journal\/matplotlib-ot-a-do-ya\/#webpage"},"articleSection":"\u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, Python"},{"@type":"BreadcrumbList","@id":"https:\/\/otus.ru\/journal\/matplotlib-ot-a-do-ya\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/#listItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/otus.ru\/journal\/","nextItem":"https:\/\/otus.ru\/journal\/matplotlib-ot-a-do-ya\/#listItem"},{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/matplotlib-ot-a-do-ya\/#listItem","position":2,"name":"Matplotlib: \u043e\u0442 \u0410 \u0434\u043e \u042f","previousItem":"https:\/\/otus.ru\/journal\/#listItem"}]},{"@type":"Organization","@id":"https:\/\/otus.ru\/journal\/#organization","name":"\u041e\u0442\u0443\u0441 \u043e\u043d\u043b\u0430\u0439\u043d-\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435","url":"https:\/\/otus.ru\/journal\/","sameAs":["https:\/\/www.youtube.com\/channel\/UCetgtvy93o3i3CvyGXKFU3g"],"contactPoint":{"@type":"ContactPoint","telephone":"+74999389202","contactType":"Customer Support"}},{"@type":"Person","@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author","url":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/","name":"A. Pavlenko","image":{"@type":"ImageObject","@id":"https:\/\/otus.ru\/journal\/matplotlib-ot-a-do-ya\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/d4c499a104d7c2522fa41f89e6819499?s=96&d=mm&r=g","width":96,"height":96,"caption":"A. Pavlenko"}},{"@type":"WebPage","@id":"https:\/\/otus.ru\/journal\/matplotlib-ot-a-do-ya\/#webpage","url":"https:\/\/otus.ru\/journal\/matplotlib-ot-a-do-ya\/","name":"Matplotlib: \u043e\u0442 \u0410 \u0434\u043e \u042f OTUS","description":"Matplotlib \u2013 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Python, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u041e\u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438: \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432; \u043a\u0440\u0443\u0433\u043e\u0432\u044b\u0445 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c; \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0445 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c \u0438 \u0434\u0440\u0443\u0433\u0438\u0445. \u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0435\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. Matplotlib \u2013 \u044d\u0442\u043e\u2026 Matplotlib \u2013 \u044d\u0442\u043e \u043f\u0430\u043a\u0435\u0442 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Python. \u041e\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/otus.ru\/journal\/#website"},"breadcrumb":{"@id":"https:\/\/otus.ru\/journal\/matplotlib-ot-a-do-ya\/#breadcrumblist"},"author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"creator":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2023\/04\/oj-1080x72020-1.jpg","@id":"https:\/\/otus.ru\/journal\/matplotlib-ot-a-do-ya\/#mainImage","width":2245,"height":1587},"primaryImageOfPage":{"@id":"https:\/\/otus.ru\/journal\/matplotlib-ot-a-do-ya\/#mainImage"},"datePublished":"2023-04-09T00:14:20+00:00","dateModified":"2024-01-23T18:42:08+00:00"},{"@type":"WebSite","@id":"https:\/\/otus.ru\/journal\/#website","url":"https:\/\/otus.ru\/journal\/","name":"OTUS JOURNAL","description":"Blog about IT","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"}}]}
</script>
<!-- All in One SEO -->
<link rel='dns-prefetch' href='//otus.ru' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='stylesheet' id='wp-block-library-css' href='https://otus.ru/journal/wp-includes/css/dist/block-library/style.min.css?ver=6.4.7' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='wbcr-comments-plus-url-span-css' href='https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/css/url-span.css?ver=2.2.0' type='text/css' media='all' />
<link rel='stylesheet' id='wpel-style-css' href='https://otus.ru/journal/wp-content/plugins/wp-external-links/public/css/wpel.css?ver=2.59' type='text/css' media='all' />
<link rel='stylesheet' id='ez-toc-css' href='https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.61' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li {font-size: 95%;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='contentberg-fonts-css' href='https://fonts.googleapis.com/css?family=Roboto%3A400%2C500%2C700%7CPT+Serif%3A400%2C400i%2C600%7CIBM+Plex+Serif%3A500' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-core-css' href='https://otus.ru/journal/wp-content/themes/contentberg/style.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-lightbox-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/lightbox.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='font-awesome-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/fontawesome/css/font-awesome.min.css?ver=1.8.3' type='text/css' media='all' />
<script type="text/javascript" id="breeze-prefetch-js-extra">
/* <![CDATA[ */
var breeze_prefetch = {"local_url":"https:\/\/otus.ru\/journal","ignore_remote_prefetch":"1","ignore_list":["\/wp-admin\/"]};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js" id="breeze-prefetch-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/lazysizes.js" id="lazysizes-js"></script>
<link rel="https://api.w.org/" href="https://otus.ru/journal/wp-json/" /><link rel="alternate" type="application/json" href="https://otus.ru/journal/wp-json/wp/v2/posts/6106" /><link rel='shortlink' href='https://otus.ru/journal/?p=6106' />
<link rel="alternate" type="application/json+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fmatplotlib-ot-a-do-ya%2F" />
<link rel="alternate" type="text/xml+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fmatplotlib-ot-a-do-ya%2F&format=xml" />
<script>var Sphere_Plugin = {"ajaxurl":"https:\/\/otus.ru\/journal\/wp-admin\/admin-ajax.php"};</script><link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-32x32.png" sizes="32x32" />
<link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-180x180.png" />
<meta name="msapplication-TileImage" content="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-270x270.png" />
<style type="text/css" id="wp-custom-css">
#menu-item-10406 .wpel-icon {
display: none;
}
#menu-item-10407 .wpel-icon {
display: none;
}
.otus-login-site a .wpel-icon {
display: none;
}
.menu-menju-navykov-container a .wpel-icon {
display: none;
}
.otus-login-site a
{
background: #ffd709;
border-radius: 12px;
color: #0f0f10;
font-size: 14px;
font-weight: 700;
line-height: 20px;
display: block;
text-align: center;
padding: 8px 25px;
}
.main-footer.dark {
background: linear-gradient(90deg, #a64fc5, #4f54e6);
border-color: transparent;
}
.main-footer.bold .copyright {
color: #fff;
}
.main-footer.bold .to-top i {
color: #fff;
}
.main-footer.bold .back-to-top {
color: #fff;
}
.nav__scroll {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.scrollable-menu .menu {
display: flex;
}
.nav__scroll
{
background: linear-gradient(90deg, #a64fc5, #4f54e6);
}
.scrollable-menu .menu .menu-item {
flex: 0 0 auto;
padding: 15px 15px;
}
.scrollable-menu .menu .menu-item a {
color: #fff;
}
.nav__scroll::-webkit-scrollbar{background-color:#fff;height:5px;}
.nav__scroll::-webkit-scrollbar-thumb{background-color:#dcdcdc;}
.nav__scroll::-webkit-scrollbar-track{-webkit-border-radius:0;border-radius:0;background-color:#fff;}/
body {
min-width: 320px;
}
.banner-click img {
margin: 0 auto;
display: block;
}
.banner-click {
cursor: pointer;
}
.banner-footer-area {
margin-bottom: 20px;
}
.banner-left-area {
margin-top: 40px;
} </style>
<!--Start VDZ Yandex Metrika Plugin-->
<!-- Yandex.Metrika counter --><script type="text/javascript" >(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");ym(34531570, "init", {clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true, ecommerce:"dataLayer"});</script>
<noscript><div><img src="https://mc.yandex.ru/watch/34531570" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --><!--START ADD EVENTS FROM CF7--><script type='text/javascript'>document.addEventListener( 'wpcf7submit', function( event ) {
//event.detail.contactFormId;
if(ym){
//console.log(event.detail);
ym(34531570, 'reachGoal', 'VDZ_SEND_CONTACT_FORM_7');
ym(34531570, 'params', {
page_url: window.location.href,
status: event.detail.status,
locale: event.detail.contactFormLocale,
form_id: event.detail.contactFormId,
});
}
}, false );
</script><!--END ADD EVENTS FROM CF7-->
<!--End VDZ Yandex Metrika Plugin-->
</head>
<body class="post-template-default single single-post postid-6106 single-format-standard right-sidebar lazy-normal has-lb">
<div class="main-wrap">
<header id="main-head" class="main-head head-nav-below has-search-modal simple simple-boxed">
<div class="inner inner-head" data-sticky-bar="0">
<div class="wrap cf wrap-head">
<div class="left-contain">
<span class="mobile-nav"><i class="fa fa-bars"></i></span>
<div class="title">
<a href="https://otus.ru/journal/" title="OTUS JOURNAL" rel="home" data-wpel-link="internal">
<span class="text-logo"><img src="/journal/wp-content/themes/contentberg/img/logo_site.svg" alt="OTUS JOURNAL"></span>
</a>
</div>
</div>
<div class="navigation-wrap inline">
<nav class="navigation inline simple light" data-sticky-bar="0">
<div class="menu-rubriki-container"><ul id="menu-rubriki" class="menu"><li id="menu-item-109" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-1 menu-item-109"><a href="https://otus.ru/journal/category/pro-it/" data-wpel-link="internal"><span>Про IT</span></a></li>
<li id="menu-item-113" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-cat-4 menu-item-113"><a href="https://otus.ru/journal/category/polza/" data-wpel-link="internal"><span>Полезное</span></a></li>
<li id="menu-item-114" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-3 menu-item-114"><a href="https://otus.ru/journal/category/lifestyle/" data-wpel-link="internal"><span>Лайфстайл</span></a></li>
<li id="menu-item-10406" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10406"><a href="https://otus.ru/catalog/courses" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Обучение</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10407" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10407"><a href="https://otus.ru/about" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Информация</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </nav>
</div>
<div class="actions">
<div class="otus-login-site">
<a href="https://otus.ru/login/" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Войти<span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
<a href="#" title="Search" class="search-link"><i class="fa fa-search"></i></a>
</div>
</div>
</div>
</header> <!-- .main-head -->
<div class="nav nav_disable nav_colored nav_transparent course-categories__nav nav__scroll ">
<div class="container wrap">
<div class="links inline simple light scrollable-menu">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov" class="menu"><li id="menu-item-10413" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10414" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10415" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10416" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10417" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10418" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10419" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10420" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10421" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
</div>
</div>
<div class="main wrap">
<div class="ts-row cf">
<div class="col-8 main-content cf">
<article id="post-6106" class="the-post post-6106 post type-post status-publish format-standard has-post-thumbnail category-polza tag-python">
<header class="post-header the-post-header cf">
<div class="post-meta the-post-meta">
<span class="post-cat">
<a href="https://otus.ru/journal/category/polza/" class="category" data-wpel-link="internal">Полезное</a>
</span>
<h1 class="post-title">
Matplotlib: от А до Я
</h1>
<a href="https://otus.ru/journal/matplotlib-ot-a-do-ya/" class="date-link" data-wpel-link="internal"><time class="post-date">9 апреля, 2023</time></a>
</div>
<div class="featured">
<a href="https://otus.ru/journal/wp-content/uploads/2023/04/oj-1080x72020-1.jpg" class="image-link" data-wpel-link="internal"><img width="770" height="515" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20770%20515%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-contentberg-main size-contentberg-main lazyload wp-post-image" alt="Matplotlib: от А до Я" title="Matplotlib: от А до Я" decoding="async" fetchpriority="high" data-srcset="https://otus.ru/journal/wp-content/uploads/2023/04/oj-1080x72020-1-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2023/04/oj-1080x72020-1-270x180.jpg 270w" data-src="https://otus.ru/journal/wp-content/uploads/2023/04/oj-1080x72020-1-770x515.jpg" data-sizes="(max-width: 770px) 100vw, 770px" /> </a>
</div>
</header><!-- .post-header -->
<div class="post-content description cf entry-content content-normal">
<div id="ez-toc-container" class="ez-toc-v2_0_61 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title " >Содержание</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#Matplotlib_%E2%80%93_%D1%8D%D1%82%D0%BE%E2%80%A6" title="Matplotlib – это…">Matplotlib – это…</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-2" href="#%D0%93%D0%B4%D0%B5_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D1%82%D1%81%D1%8F" title="Где используется">Где используется</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-3" href="#%D0%A1%D0%BF%D0%B5%D0%BA%D1%82%D1%80_%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B5%D0%B9" title="Спектр возможностей">Спектр возможностей</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-4" href="#%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D1%8B_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9" title="Форматы изображений">Форматы изображений</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-5" href="#%D0%A1%D0%B2%D1%8F%D0%B7%D1%8C_%D1%81_PyLab_%D0%B8_Pyplot" title="Связь с PyLab и Pyplot">Связь с PyLab и Pyplot</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-6" href="#%D0%9D%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE_%D1%81%D0%BB%D0%BE%D0%B2_%D0%BE_%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8" title="Несколько слов о терминологии">Несколько слов о терминологии</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-7" href="#%D0%9D%D0%B0%D1%87%D0%B0%D0%BB%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B" title="Начало работы">Начало работы</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-8" href="#%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0" title="Установка">Установка</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-9" href="#%D0%98%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8F_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2" title="Иерархия объектов">Иерархия объектов</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-10" href="#%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D0%B9_%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA" title="Линейный график">Линейный график</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-11" href="#%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B_%D1%80%D0%B0%D1%81%D1%81%D0%B5%D1%8F%D0%BD%D0%B8%D1%8F" title="Диаграммы рассеяния">Диаграммы рассеяния</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-12" href="#%D0%93%D0%B8%D1%81%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B" title="Гистограммы">Гистограммы</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-13" href="#%D0%9A%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" title="Комбинирование">Комбинирование</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-14" href="#%D0%9A%D1%80%D1%83%D0%B3%D0%BE%D0%B2%D1%8B%D0%B5" title="Круговые">Круговые</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-15" href="#%D0%9A%D1%80%D0%B8%D0%B2%D1%8B%D0%B5" title="Кривые">Кривые</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-16" href="#%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B8_%D0%BD%D0%B0%D0%B4%D0%BF%D0%B8%D1%81%D0%B8" title="Изменения и надписи">Изменения и надписи</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-17" href="#%D0%A2%D0%B5%D0%BF%D0%BB%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BA%D0%B0%D1%80%D1%82%D0%B0" title="Тепловая карта">Тепловая карта</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-18" href="#%D0%A1%D0%BB%D0%BE%D0%B6%D0%BD%D0%B0%D1%8F_%D0%B2%D0%B8%D0%B7%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F" title="Сложная визуализация">Сложная визуализация</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-19" href="#%D0%92%D0%B5%D1%80%D0%BE%D1%8F%D1%82%D0%BD%D1%8B%D0%B5_%D1%82%D1%80%D1%83%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8" title="Вероятные трудности">Вероятные трудности</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-20" href="#%D0%9A%D0%B0%D0%BA_%D0%B2%D1%8B%D1%83%D1%87%D0%B8%D1%82%D1%8C_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D1%83" title="Как выучить библиотеку">Как выучить библиотеку</a></li></ul></nav></div>
<p>Matplotlib – популярная библиотека Python, используемая разработчиками для визуализации информации и анализа данных. Она применяется при создании:</p>
<ul>
<li>линейных графиков;</li>
<li>круговых диаграмм;</li>
<li>построчных гистограмм и других.</li>
</ul>
<p>Далее предстоит научиться импортировать библиотеку, а также рассмотреть на ее примере ключевые способы виртуализации.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="Matplotlib_%E2%80%93_%D1%8D%D1%82%D0%BE%E2%80%A6"></span>Matplotlib – это…<span class="ez-toc-section-end"></span></h2>
<p>Matplotlib – это пакет виртуализации данных в Python. Он поддерживает работу с информацией сразу на нескольких уровнях:</p>
<ol>
<li>Через модуль Pyplot. Он будет рассматривать имеющийся график в качестве единого целого.</li>
<li>При помощи объектно-ориентированного интерфейса. В нем каждая фигура/ее часть рассматривается в виде отдельного объекта. Такая концепция позволяет выборочно изменять их свойства, а также отображение.</li>
</ol>
<p>Matplotlib – инструмент, поддерживающий работу с двумерной и трехмерной графикой. Он написан и поддерживался Джоном Хантером. Изначально распространялся под BSD-подобной лицензией. Его создание – это результат подражания графическим командам MATLAB.</p>
<p>Последняя поддерживаемая стабильная версия Matplotlib – 2.1.1 Для нее потребуется:</p>
<ul>
<li>Python 2.7 версии или новее 3.4;</li>
<li>NumPy – от 1.7.1 версии и выше.</li>
</ul>
<p>Далее предстоит работать с Matplotlib to Pyplot. Информация, представленная в статье, больше подходит тем, кто имеет хотя бы малейшее представление о NumPy. В основном предстоит пользоваться модулем numpy.random, который позволяет получать «тестовые» данные, а также рисовать примеры из источников статистического характера.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%93%D0%B4%D0%B5_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D1%82%D1%81%D1%8F"></span>Где используется<span class="ez-toc-section-end"></span></h2>
<p>Matplotlib – это инструмент to data visualization. с его помощью можно представить информацию любой сложности в простом и понятном виде. Библиотека дает возможность не только формировать различные графики, но и комбинировать их.</p>
<p>При помощи дополнительных библиотек удается расширить стандартные возможности по анализу данных. Пример – модуль Cartopy. Он позволит работать с картографическими информационными единицами.</p>
<p>Matplotlib – это не просто готовое решение для графиков и визуализации. Библиотека является основной to других библиотек. Пример – Seaborn. Он упрощает процедуру построения графиков, обладает большим спектром возможностей для косметического улучшения внешнего вида выводимых результатов. В его основе заложена рассматриваемая библиотека. Она является незаменимым инструментом анализа информации.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%BF%D0%B5%D0%BA%D1%82%D1%80_%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B5%D0%B9"></span>Спектр возможностей<span class="ez-toc-section-end"></span></h2>
<p>Matplotlib – это гибкий, легко конфигурируемый пакет. Он совместно с three libraries: SciPy, IPython и NumPy предоставляет функционал, сравнимый to Matlab. Сейчас он работает с несколькими графическими библиотеками, в состав которых включены PyGTK и wxWindows.</p>
<p>Поддерживает:</p>
<ul>
<li>графики;</li>
<li>гистограммы и столбчатые диаграммы;</li>
<li>диаграммы рассеяния;</li>
<li>круговые диаграммы;</li>
<li>диаграммы стебель-листья;</li>
<li>градиентные поля;</li>
<li>контурные графики;</li>
<li>спектральные диаграммы.</li>
</ul>
<p>Пользователи здесь смогут указывать не только координатные оси. В пакете поддерживаются надписи и пояснения, возможность использования логарифмических шкал, полярные координат.</p>
<p>Для трехмерной графики рекомендуется перейти to toolkit mplot3d. Существуют иные наборы инструментов для выполнения разных задач: для картографии, работы с Excel, для GTK.</p>
<p>В Matplotlib поддерживается возможность создания анимированных объектов. На первых порах соответствующий функционал не требуется. Им пользуются в единичных случаях.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D1%8B_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9"></span>Форматы изображений<span class="ez-toc-section-end"></span></h2>
<p>При помощи рассматриваемой библиотеки пользователи смогут работать to graphics. Набор поддерживаемых форматов изображений может быть получен из словаря под названием FigureCanvasBase.filetypes. Наиболее распространенными форматами to Matplotlib Python служат:</p>
<ul>
<li>PNG;</li>
<li>EMF;</li>
<li>JPEG;</li>
<li>PostScript;</li>
<li>PDF;</li>
<li>EPS;</li>
<li>SVG и SVGZ;</li>
<li>TIFF;</li>
<li>RGBA.</li>
</ul>
<p>Опираясь на пакетные классы допустимо создание других модулей. Пример – инструмент для генерирования искрографиков.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%B2%D1%8F%D0%B7%D1%8C_%D1%81_PyLab_%D0%B8_Pyplot"></span>Связь с PyLab и Pyplot<span class="ez-toc-section-end"></span></h2>
<p>При изучении рассматриваемой библиотеки можно встретить два модуля – to Pyplot и Pylab. Необходимо понимать, когда и какой вариант использовать в работе. Здесь необходимо запомнить следующее:</p>
<ol>
<li>Matplot – это специальный пакет для визуализации информации в Python.</li>
<li>Pyplot – модуль, включенный to Matplot. Он отображается в программном коде в виде matplotlib.pyplot. Используется для автоматического создания осей, фигур и иных элементов без погружения в логику происходящего.</li>
<li>Pylab – тоже включенный to Matplot модуль. Он устанавливается совместно с библиотекой. Одновременно импортирует Pyplot и NumPy для дальнейшей работы с массивами в интерактивной форме. Позволяет при использовании информации получать доступ к функциям, отвечающим за черчение.</li>
</ol>
<p>Pylab – это пакет, который на практике в Matplot library почти не встречается. Раньше он использовался для облегчения перехода с Matlab to Matplot. Данный инструмент позволял обходиться без операторов импорта. Наиболее распространенным модулем выступает Pyplot.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9D%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE_%D1%81%D0%BB%D0%BE%D0%B2_%D0%BE_%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8"></span>Несколько слов о терминологии<span class="ez-toc-section-end"></span></h2>
<p>Перед началом использования популярной library Питона предстоит запомнить несколько определений. Они помогут быстрее разобраться с исходными кодами предлагаемых примеров:</p>
<ol>
<li>Axes – область отображения информации. Может быть помечена как ось X, ось Y и так далее.</li>
<li>Spines – линии, соединяющие точки Axes.</li>
<li>Figure – законченное окно или страница. На соответствующем элементе располагается итоговый график.</li>
</ol>
<p>Запомнить эти простые определения должен каждый разработчик. В противном случае интерпретация исходного кода to Python будет затруднена.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9D%D0%B0%D1%87%D0%B0%D0%BB%D0%BE_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B"></span>Начало работы<span class="ez-toc-section-end"></span></h2>
<p>Matplot – универсальный инструмент, работающий через Питон на Windows, MacOS и Linux. Если программист использует Jupiter Notebook или Google Collab, дополнительная инициализация ни Python, ни рассматриваемого пакета не потребуется: они уже встроены в систему.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0"></span>Установка<span class="ez-toc-section-end"></span></h3>
<p>Чтобы написать исходный код to любой IDE (пример – в Visual Studio Code), необходимо сначала установить Python, а после – библиотеку Learn при помощи терминала:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/l1lRenBUuT0WCfeYrnOcjSYTH1A1bydlICOJ-nyH1JrZ7SPSumWN0JQZ0G4gSH33vYQprroVuxM4vOCcxzZYbg0WfnFQPTOgPi11BK975kX1COFm1eyby3z-kqb7DxB73jxcE5LRf_OshI0EYOx2VQ" alt="Matplotlib: от А до Я"/></figure>
<p>Теперь можно приступить к непосредственному импорту Matplot:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/g8z_ll5eoM14KcWbaeLzrxgtgxX1vmjB4PLZ_27n8Y8eK25WOUPVfq7dIXHb-Gsgga-JrMPnakBcECQcCId0-URuzZB7u1hAcNucqxQz-CMbZqqoMf7fM4hhaICzycRXlu5gpw129ldMJDovgvdfvg" alt="Matplotlib: от А до Я"/></figure>
<p>Plt – это общепринятое сокращение. Оно встречается не только в учебниках, но и в официальной документации Питона.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%98%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8F_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2"></span>Иерархия объектов<span class="ez-toc-section-end"></span></h3>
<p>Ключевая особенность изучаемого инструмента – это наличие иерархии объектов. Под ней подразумевается, что каждый график будет основываться на древоподобную структуру элементов пакета.</p>
<p>Самым важным является объект Figure. Он представляет собой внешний контейнер to графики Matplot. Включает в себя несколько Axes в случае необходимости. Под «осями» понимаются настоящие графики.</p>
<p>Объект Figure – это своеобразный «ящик» для нескольких Axes. В порядке иерархии под «осями» располагаются элементы меньшего размера. К ним относят:</p>
<ul>
<li>отдельно изображенные линии;</li>
<li>легенды;</li>
<li>отметки;</li>
<li>тестовые боксы.</li>
</ul>
<p>Каждый компонент диаграммы – это собственный манипулируемый элемент to Python, вплоть до отметок и ярлыков.</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/uYb2LpKwq25X02D829jDiNljkzqTd1WECpw9jEybXdF6EG5-dxKIi0iTO6WKfKiFGdfmRFF-V7HS19_VWlrRXXrjJcwsyCGtDwDp-kCJQvn578ON3uffB7Ma6mGKkohRJOaICcpKcWEKf27PWoLdSw" alt="Matplotlib: от А до Я"/></figure>
<p>Выше – наглядный пример иерархии в действии.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D0%B9_%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA"></span>Линейный график<span class="ez-toc-section-end"></span></h3>
<p>Далее работу с Matplotlib и его libraries предстоит рассматривать на основе наглядных примеров. Это поможет лучше усвоить информацию тем, кто ранее не работал с NumPy и Pyplot.</p>
<p>В качестве простого примера необходимо изобразить линейный график. Для него потребуется создать переменные – x и y. Они содержат координаты точек to оси x и y соответственно:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/bjYYQKsXeIcYFb-RiTmdPA20IRagKm7Y-7UuWUQ-FPqq-4UHKybTKQolnp-Us3w0qET_hpPESZn0SgijKAubgMovqEyAxwVx6_BCB2IgQRNNZ3yFhPtEf1IOVuEf1JEYWMDyGm7v3mkvBTAVQYpeyA" alt="Matplotlib: от А до Я"/></figure>
<p>Теперь необходимо построить график, соединяющий заданные точки:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/ImgOJfpUVJMiinrF5738zozdL-ARnVcnJhYWJC7R12CNPa6_bQpgBXSPeKGhkmLas227VNWGKIe6Pj7jfoQFkUDTsM6oY_RYN3wZqNiJc4EbaRbsFa6_ZDjcGRf3a6Qn8JKdTQdKYOiUip46RcdF3Q" alt="Matplotlib: от А до Я"/></figure>
<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/CH3pNeNbUDOc__Tk4BQlJHEk9sMN7z4MJ8wWT5VRWlTQepa4tQRrVbWBlwy8G8xNLx1-y8RfRsy8gV-0eDdcl9Nx5kST98bLvZIdmAsIj18IcTad2aeVSSNO-2jtVqM-HzJUeIGmcxIXyjF32p4uUA" alt="Matplotlib: от А до Я"/></figure>
<p>Выше – результат обработки соответствующего кодового фрагмента. В нем:</p>
<ul>
<li>plt.plot – это стандартная функция построения графика в соответствии с заданными значениями;</li>
<li>plt.show() – команда, отвечающая за вывод визуализированной информации на экран (может отсутствовать).</li>
</ul>
<p>Если не использовать show(), вместо красивого графического отображения линейного графика пользователь увидит разнообразную техническую информацию.</p>
<p>Теперь получившийся результат можно дополнить для удобства заголовком, а также подписями имеющихся осей:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/pKOiEyjDB2b74Pp3w9w2d-Oe3WJOruMTcbE6Hk2mi0YDftDHi29e1g1F9ioj1AhFH8sXkeixXspQi39auYBMW3wVHFTx0huet4mD4gqWSt6pq7nuEfL0pQ4tkkCeYzR6To_mBHdVdEbUpxEPn836RA" alt="Matplotlib: от А до Я"/></figure>
<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/yDCoiD5XvzTDGdQF1vJfrKT3OchbvvY_KDZr_FRDQfr9urz89FJJBlNfVKMNHXZtOtcmkhKiXxx4Cwq7l_MAVDCajXcRXGHvDOuunV6D0iBAoOVT3yB5XrAcIgb2PkZ-wHBH0pj4Wd05pYcSFfWBbA" alt="Matplotlib: от А до Я"/></figure>
<p>Через Matplotlib допускается настройка отображения любых графиков. Пример – изменение цвета линии, выделение точек, координаты которых изначально были заданы разработчиком:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/AMAS1RJ40Uv8hHRlMvJsM4mrsd30_armRujXPetkLzi0SbDqT8p99ocYJUOXC_z0ZzMbG75BP9RbHaVRHpQAIn47mV28HlBaTilLAOcG8-gPcBoPwdzNZY1HD70bJgbtcnKwPh4_0R2ssZFsIHfgqA" alt="Matplotlib: от А до Я"/></figure>
<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/ALr0zefypJtkVOf4FS3bF8U2rw88ROcSdcnYdCXQBtlAvwXOirl7CeBjZMDquxpLshQTFEmwtYlyVgWUnqoYm2LdmyO-pyQ_QJbMz-ZoivGgul5_Q0DCoekIWdT3ty6E4qzabfjG9AqtF5WNGe_EPg" alt="Matplotlib: от А до Я"/></figure>
<p>Выше – пример того, что получится, если внести соответствующие изменения to code. Заданные точки хорошо заметны, а их цвет, как и линии, изменился. Он стал зеленым.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B_%D1%80%D0%B0%D1%81%D1%81%D0%B5%D1%8F%D0%BD%D0%B8%D1%8F"></span>Диаграммы рассеяния<span class="ez-toc-section-end"></span></h3>
<p>Рассмотренный ранее пример показывал точки, которые не были переданы в массиве. Из-за этого получилось линейное отображение данных. В Matplotlib можно сформировать диаграмму рассеяния. Она необходима тогда, когда требуется оценить взаимосвязь одной переменной to другой. Их значения будут откладывать по разным осям.</p>
<p>В Matplotlib для построения диаграммы рассеяния необходимо прибегнуть to plt.scatter(). Эта функция будет в качестве аргументов принимать переменные с дискретными значениями:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/nrJPW_oks4O3oFyx26G7_h9x2IzzWvaA4LYB-4QWdgb9WzfUhK0qaO__3hrG5ANd_ihbA4UGBFwh5PgUSXZZZqgzTl8ghgpbLlh89ATDk1uPwV5MhveR1aS4TrQW5LJCFWJntrS4joVVC_XWbHFFNA" alt="Matplotlib: от А до Я"/></figure>
<p>Обработанный код будет выглядеть так:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/KidHKSYUjl6pMfdwPdkIyMzUqhVEB2QfQ4uqd5D6NUxA8Diz4szxhiAj_A5uStdWlsFQDfeLaTLR-uWXRnPR66V2nbhANvjf-0LNkH7cOhah8TjopD_hX9dhlI_UxIib-du6tkT-SCc2N7Vgqct38A" alt="Matplotlib: от А до Я"/></figure>
<p>Диаграмма рассеяния – это множество отдельно взятых точек на координатной плоскости.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%93%D0%B8%D1%81%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B"></span>Гистограммы<span class="ez-toc-section-end"></span></h3>
<p>Еще один популярный и удобный метод to visualization – это столбчатые диаграммы (или гистограммы). Графики будут информировать пользователя о том, как меняются исходные данные. Гистограммы работают иначе. Они используются для отображения принципов распределения информации. Чем больше в диапазоне значений, тем выше окажется получившаяся полоса. Соблюдается полная пропорциональность.</p>
<p>Обычно при работе с гистограммами одна из осей отображает одну категорию, вторая соответствует ее дискретному значению.</p>
<p>Построить гистограмму можно несколькими способами. Первый вариант – это прибегнуть to hist(). Эта функция имеет два ключевых параметра:</p>
<ul>
<li>список значений, используемых для построения графика;</li>
<li>количество диапазонов для распределения соответствующих точек.</li>
</ul>
<p>Программный код будет выглядеть так:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/r1XaR2Ymush8kalZv7I0p7ud5UeUIonxO_9EEDoi2B7TJOkDfneYBjeiGtnBhBTUlqjV5Lw9JIA1Ei41L75YIvlmoGMumUQDS1jLrfPwRhcGw8cfMC1o10BSvpq29HdWSa5MyzCOaNGrL_dqFqfJag" alt="Matplotlib: от А до Я"/></figure>
<p>Ниже – наглядный пример того, как будет выглядеть обработанный код:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/dyWzhc2hryUL8SLpMRo_elNghBkCT7tFMzkyD2TSHUJ1mzvHHLsAf6cIrbwtE-vqa2kWGrY732hpyZRlhd3FkJs5jnd9tD-xzU-SPAzde6n0w4cwtGWlwoN3EEwy0insVtD3a1o9OKn7Lth4EJfdRw" alt="Matplotlib: от А до Я"/></figure>
<p>А вот – столбчатая диаграмма, используемая для наглядной демонстрации величины прибыли по месяцам. Код будет таким:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/UeJ4mbDktH677Hsl9yM-x1f530BisjmlIMRvyVCB5MqcwqM-f9AsN-9yFDOO8xHBenvKTymE6Mrug3qR8Nhggc1oAM81quOddkPTESNo1MRrzobZGbe3JwfNRJCB49QpljXnoDwNgLJ4z1OqqRoFGw" alt="Matplotlib: от А до Я"/></figure>
<p>А вот результат, выведенный на экран:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/8uLS57uh5oiu79soMhDsW3IbWfrrHUr00IdVcrsM0lu0KFF5VwPl5HtKu3CMzlQjtBX2EjaFCO-5tmo7-lX1bWrAt77opN3uBqRujovST56TjNFvXco1y1eqTHHPC51fi838aSrP8XxHKYxlrj6rZg" alt="Matplotlib: от А до Я"/></figure>
<p>Теперь с помощью этой гистограммы можно увидеть динамику изменения прибыли по заданным пользователем месяцам.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5"></span>Комбинирование<span class="ez-toc-section-end"></span></h3>
<p>Matplotlib – инструмент, который дает массу возможностей виртуализации информации. В нем допускается объединение сразу нескольких типов графиков. Пример – линейную и гистограмму.</p>
<p>Вот – наглядный пример соответствующего кода. To столбцы гистограммы необходимо добавить точки, указывающие значения прибыли. Далее – соединить их:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/AuQtkV4Ijch8yUIwscasMEN0QTRkgDiDXIUxKTmt4uvzI1oepV7iKC-GyP4p5ohHrV4DFgiLug9OKH7F2d4J55DSq2rslVbCW9Hz8TTvBMM9332ZmgCtW9klCK0zConA_UMcr64XAJUOrKomiFLw1Q" alt="Matplotlib: от А до Я"/></figure>
<p>На экране появится следующий результат:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/Aku_m1np0Pe9O4cuNMVR_XenCvV_aOcdsuKHQjCJNTimK5YqQa6XTDvUSDjW6oc8L5cNkh8syx3miklVWx6LpMDvvOZDwL6QaaZ2Mm7hWlsF4tCYWZ2hF_DwHXSxq36s3dzMHxSctbIX9JOuUofTqA" alt="Matplotlib: от А до Я"/></figure>
<p>Получившийся результат отображает необходимую информацию, но рекомендуется изменить некоторые его настройки. Связано это с тем, что линейную интерпретацию данных на темно-синем фоне видно очень плохо. Для исправления ситуации необходимо увеличить прозрачность гистограммы. За это отвечает параметр alpha.</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/x4tHs_u1Bu5sJXnlbyzLoYFhSb74lub0Il0DTgHwy4IVSrMmJP_LDaKiYGODPrDUa9JK_C-M18xWwkZTF775kZNBAH0dAT0tDg_3AatcW9rJS5asKuIoCkJHo7HWtiH4fqYFQmveH9OmXIuj0QOMqg" alt="Matplotlib: от А до Я"/></figure>
<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/PNAJkE4U9jtU39LBayb-Hf2th_q3bTqawz_KFSkGqnspzINGIOSKKOqr0qKePnIp6jf-PK5EfsUgmCSS-RGgvH9ScJaWram43c901RutbMrvv8sqKkMlMmPoEbxsJKIIFsDdsKhUXAXK-oB7inpgpw" alt="Matplotlib: от А до Я"/></figure>
<p>Alpha может принимать разные значения:</p>
<ul>
<li>0 – полная прозрачность;</li>
<li>1 – отсутствие прозрачности.</li>
</ul>
<p>Значения, расположенные в диапазоне (0;1), указывают на степень прозрачности. Чем выше соответствующий показатель, тем «ярче» будет отображаемый на экране компонент.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D1%80%D1%83%D0%B3%D0%BE%D0%B2%D1%8B%D0%B5"></span>Круговые<span class="ez-toc-section-end"></span></h3>
<p>В Matplotlib можно рисовать круговые диаграммы. Они используются для отображения состава имеющихся групп. Пример – преобладание автомобилей на дорогах того или иного региона:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/P-Nmmlt6PqC2zI6OhB_-E3vE12OpKnWLCW8WgC6QrDrPt0GJg6bDfdvmGyKl0G-IB5gEzZ-uczklwAH0wabO13hNV-cLmjol_7GhcNi-_IbjqWQCxjlC8Jme6nq31pCfsmd3fNu_Jz5BsGYkQ90JXQ" alt="Matplotlib: от А до Я"/></figure>
<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/cRn08aZr1hXKJiM_hQ3vbgb4XKrB8KuLPDzGio15zlHwPq_ljWkBryBjoyEp5Czl1knAuJKGQahyhIgxsxfu2kOyxmPslG4Svas_jXk8iOCiX4EQcVdOgh2fR7Q9Gn2rODdzWbDvfCXoGNJ5VsLr4g" alt="Matplotlib: от А до Я"/></figure>
<p>Выше – наглядный пример элементарной круговой диаграммы в Matplotlib. Информация здесь понятна, но не детализирована. Понять долю, приходящуюся на каждую имеющуюся марку, невозможно.</p>
<p>Исправить ситуацию можно путем добавления to pie параметра autopct:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/aKC46N4yoe54CygKR9a7Q5W6hB2MizgltkdgJTohiSlg5MSpXf50qjtY1Jccjamw26cptQWs241xEUaqr2Mqtdb3W901zY34SV-tBK-3Jq4WdDTYiKEMhG_9b6gg5bW5_yIOGHx9Wnrp0YyrpAXVtQ" alt="Matplotlib: от А до Я"/></figure>
<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/0z5Nh3bzhsV1G_mzvLpSF9rvtT8BGwe8vFDk4huuQd4_8oHrc7M6OVDTWF6_LxXlvrYz2L51rhVfxyn52MjqoBOQEqipiYkOa1yjEfBdiQNCZSYVPmf83LfQSt8GFhWm6MKTtG3InOIhxD6LRng83w" alt="Matplotlib: от А до Я"/></figure>
<p>В этот параметр необходимо передать формат отображения числа. Приведенный пример предписывает работу с целым числом и одним знаком можно запятой. Выше – итоговый результат обработки написанного в Matplotlib фрагмента.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D1%80%D0%B8%D0%B2%D1%8B%D0%B5"></span>Кривые<span class="ez-toc-section-end"></span></h3>
<p>Еще один распространенный вариант – это рисование нескольких кривых на одном графике. Такая концепция в основном применяется для сравнения. В программном коде ситуация выглядит так:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/zeelQCh0PLA00eJkEK8oYhVWZx160dpB7l8Cx9OvSijWaX5EgNdgtuWJo2GzeF-V-k5qLTOqqALp-HR7Eb6JfJKpDijtZwMKjNvxI38i13qjrKPn4cwW6aqYRJAIr8nwAqkKa6MJmxv27WX6m6Nxvg" alt="Matplotlib: от А до Я"/></figure>
<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/7ykO2pplWjO3YtBMgV-8IQxxBzvRJwxgwzOgC09v3jn_zY7c91cELWf1V3OQ_uGZsEYpIS6MBzhQJFhVl9H_o8RxZ25qk6cLNb51KWftIUBLBFpijdzLaZV1q4u2YZSvlp9L48MzC2fG1TTb-o4M7Q" alt="Matplotlib: от А до Я"/></figure>
<p>Выше – наглядный пример получившегося результата.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B8_%D0%BD%D0%B0%D0%B4%D0%BF%D0%B8%D1%81%D0%B8"></span>Изменения и надписи<span class="ez-toc-section-end"></span></h3>
<p>Ранее рассмотренные примеры были похожи друг на друга. На самом деле каждая виртуализация информации – это уникальный продукт работы Matplotlib. Он поддерживает возможность настройки цвета линии/точек, а также добавления надписей на график. Для этого используются параметры:</p>
<ul>
<li>color= ‘цвет’ – отвечает за выбор цвета, которым будет окрашен компонент;</li>
<li>label= ‘значение’ – подпись к линиям.</li>
</ul>
<p>Вот – наглядный пример кода, демонстрирующего изменение параметров элементов виртуализации:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/Yc2MDjdKLleQzUnIbeEQm3eszXteBlqk4W54T_L6HEN3qzidi7aa40-RKQKMEjLLB5Hp0oCX79FBcKxEzRKW5diVzZ0UEZGFKKhVEpnOrN9OkYdhHxgJ9jK0l7DxhR8qeoafcipWt6eA8OtHjKCZWw" alt="Matplotlib: от А до Я"/></figure>
<p>Ниже – то, как это будет выглядеть после непосредственной обработки:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/LN3ictz1jl4pdL0EE6prOsQRfg8M3X4bBPY628hafgaEEx30Qp4EDJhvksof4OwhG7IqGGYeHKH98Cb-9T9W0R30gqIHykJxzMyP6LhzINucbq7-o4kLAhFNAusdWcN_q4p0cCM1Lx_wpf3L1Srwtg" alt="Matplotlib: от А до Я"/></figure>
<p>Здесь для улучшения возможности сравнения изменен цвет нарисованных кривых на красный и синий соответственно. В левой верхнем углу добавлены подписи. Они показывают, какой цвет и за какой спектр метаданных будет отвечать.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A2%D0%B5%D0%BF%D0%BB%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BA%D0%B0%D1%80%D1%82%D0%B0"></span>Тепловая карта<span class="ez-toc-section-end"></span></h3>
<p>Если разработчик решил прибегнуть to Matplotlib, он получит доступ к совершенно разным инструментам и способам виртуализации. Кроме «стандартных» средств для виртуального отображения информации, здесь поддерживаются тепловые карты.</p>
<p>Это – средство, которое будет незаменимо при работе с географическими данными. Вот – наглядный пример его создания:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/GPH2-q83kcaqSb8gycQCsEuXccdaW3nrUDtxID74jh3LX7zhL8EW1GqAL7CPFUCKobZJJRu7N1GlgHW5vyegsR7utVM4vrkhJO5d9WBDTKEsCywx2tsnR0drrcmAYyTpWgIYatiFPH4jwL3VPoJuqg" alt="Matplotlib: от А до Я"/></figure>
<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/3ZMs5ngeF-1N2JwPdd1fzD9R4dZqz7ZaU4-b2ZtRLI0aJVNujrSmXCDxDffiz0T8Dpe53Z3uw3b9j3hmsIFW284sb9DfFvxJheO-AhAtSqeGPUQj0Ra7vGuTfuCyuvUplPcMhN0Dm3meC5HNN0ax3Q" alt="Matplotlib: от А до Я"/></figure>
<p>Выше – наглядный пример тепловой карты по заданным параметрам. Она может настраиваться по нуждам пользователя.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%BB%D0%BE%D0%B6%D0%BD%D0%B0%D1%8F_%D0%B2%D0%B8%D0%B7%D1%83%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F"></span>Сложная визуализация<span class="ez-toc-section-end"></span></h3>
<p>Matplotlib поддерживает не только тепловые карты, но и достаточно сложные средства виртуализации. В качестве образца будет использоваться столбчатый график с накоплением. Такой компонент позволяет отслеживать соотношение динамику соотношения значений to одной переменной.</p>
<p>Здесь – образец для ситуации с устройствами, работающими на базах Android и Ios.Он поддерживает отслеживание соотношений в разные годы:</p>
<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/IYFabO5ljVOHvs3Z6ni2IFThvMxzgaXXdLqVZ2rLaxW9N0qEOVTZm1kErjUCPEKrhRjg9GCkwF6NF_934TZAio7p2UjbbtCpZp30UoHLyBySSZnIascADr4nnzAQ7UL2b7sL_CnNM1tD20Z04VzHMA" alt="Matplotlib: от А до Я"/></figure>
<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/69lpmUDMdIEQxHDYryXJWEWVsXu-807Q2Sl8FWrD8vXSwL-W8RBBwW8nTm0lLDRwA5B4mFohPWj0Zzidi51-w0Ak27g_qrrlknQYtsz78VVjcAbS__TiksA3ubOJ0rkUtZMc-kZaQxcgeQfcSKj8hA" alt="Matplotlib: от А до Я"/></figure>
<p>Данный способ to virtualize указывает на то, что соотношение устройств, находящихся под управлением Android и iOS постепенно меняется. Андроид-оборудования с течением времени становится на порядок больше.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%92%D0%B5%D1%80%D0%BE%D1%8F%D1%82%D0%BD%D1%8B%D0%B5_%D1%82%D1%80%D1%83%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D0%B8"></span>Вероятные трудности<span class="ez-toc-section-end"></span></h2>
<p>Matplotlib – функциональный и интересный инструмент. Он предоставляет средства для быстрой и качественной виртуализации, но его изучение может быть затруднено. Официальная документация у Matplotlib достаточно большая. Несмотря на это, сложности возникают по другим причинам:</p>
<ol>
<li>Размер библиотеки. Matplotlib сама по себе представлена порядком 70 000 строк кода.</li>
<li>Вхождение в состав инструмента нескольких интерфейсов (способов для построения фигур на экране). Matplotlib умеет взаимодействовать с огромным количеством бэкендов – они отвечают за то, как фактически отобразятся диаграммы, а не только за внутренние структурные особенности.</li>
<li>Часть официальной документации устарела. Matplotlib активно развивается. Она дорабатывается и обновляется до сих пор. Некоторые старые примеры из официальной документации и интернет-источников могут включать в себя примерно на 70% меньше программного кода по сравнению с современными версиями.</li>
</ol>
<p>Несмотря на это, Matplotlib Python – это неплохой инструмент для работы с графиками. Полученные результаты обработки данных используются не только при анализе, но и разнообразных проектах, публикациях, документации.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%B0%D0%BA_%D0%B2%D1%8B%D1%83%D1%87%D0%B8%D1%82%D1%8C_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D1%83"></span>Как выучить библиотеку<span class="ez-toc-section-end"></span></h2>
<p>Самостоятельно освоить рассмотренную библиотеку бывает не так просто, особенно если необходимо работать с большими массивами информации. <a href="https://python-scripts.com/matplotlib" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Здесь<span class="wpel-icon wpel-image wpel-icon-6"></span></a> можно увидеть еще один наглядный образец использования Matplot. В Сети полно туториалов и примеров, а также сопутствующей документации по данному инструменту. Только часть из них устарела, а некоторые требуют значительных познаний в programming.</p>
<p>Лучше всего для быстрого погружения в выбранное направление не заниматься самообразованием, а отдать предпочтение специализированным дистанционным компьютерным курсам. Пример – от образовательного центра OTUS.</p>
<p>Это верный способ выучить не только Matplot, но и любой другой инструмент/фреймворк/библиотеку Питона. На специализированных компьютерных курсах «с нуля» пользователя научат профессионально пользоваться выбранным пакетом.</p>
<p>Дистанционные компьютерные курсы выделяются следующими чертами:</p>
<ol>
<li>Сжатые сроки обучения. Каждый курс рассчитан на срок от нескольких месяцев до года.</li>
<li>Грамотно составленные программы, поданные понятным языком. Можно выбрать направление с учетом ранее приобретенного спектра знаний.</li>
<li>Разнообразие направлений с возможностью их совмещения. Пользователи смогут учить не только Matplot, но и другие компоненты Питона. При желании – вовсе параллельно изучать совершенно другой язык разработки.</li>
<li>Интересные домашние задания, многочисленная практика. Все это поможет не только научиться пользоваться инструментом разработки, но с поспособствует формированию качественного первого портфолио.</li>
<li>Постоянное кураторство. Каждый курс ведется специалистом в том или ином направлении. Наставник всегда придет на помощь.</li>
<li>Возможность совмещения с обыденной жизнью, основной работой и семьей. Все обучение строится на основании вебинара. Пропущенный урок пользователь сможет в любой момент посмотреть в режиме «онлайн».</li>
</ol>
<p>При успешном прохождении курса пользователь не только будет знать, что такое for i, int и как работает Matplot, но и получит электронный сертификат для документального подтверждения приобретенных в процессе учебы навыков.</p>
<p><em>Приглашаем выбрать курс по востребованным IT-направлениям <a href="https://otus.ru/?utm_source=oj" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">уже сегодня<span class="wpel-icon wpel-image wpel-icon-6"></span></a>!</em></p>
</div><!-- .post-content -->
<div class="the-post-foot cf">
<div class="tag-share cf">
<div class="post-tags"><a href="https://otus.ru/journal/tag/python/" rel="tag" data-wpel-link="internal">Python</a></div>
<div class="post-share">
<div class="post-share-icons cf">
<span class="counters">
</span>
<a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fotus.ru%2Fjournal%2Fmatplotlib-ot-a-do-ya%2F" class="link facebook wpel-icon-right" target="_blank" title="Share on Facebook" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-facebook"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fmatplotlib-ot-a-do-ya%2F&text=Matplotlib%3A%20%D0%BE%D1%82%20%D0%90%20%D0%B4%D0%BE%20%D0%AF" class="link twitter wpel-icon-right" target="_blank" title="Share on Twitter" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-twitter"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fotus.ru%2Fjournal%2Fmatplotlib-ot-a-do-ya%2F" class="link linkedin wpel-icon-right" target="_blank" title="LinkedIn" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-linkedin"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fmatplotlib-ot-a-do-ya%2F&media=https%3A%2F%2Fotus.ru%2Fjournal%2Fwp-content%2Fuploads%2F2023%2F04%2Foj-1080x72020-1.jpg&description=Matplotlib%3A%20%D0%BE%D1%82%20%D0%90%20%D0%B4%D0%BE%20%D0%AF" class="link pinterest wpel-icon-right" target="_blank" title="Pinterest" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-pinterest-p"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
</div>
</div>
</div>
<div class="post-nav">
<div class="post previous cf">
<a href="https://otus.ru/journal/modulnoe-testirovanie-ot-a-do-ya/" title="Prev Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-left"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/modulnoe-testirovanie-ot-a-do-ya/" class="image-link" rel="previous" data-wpel-link="internal">
<img width="150" height="106" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20106%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Модульное тестирование от А до Я" decoding="async" data-srcset="https://otus.ru/journal/wp-content/uploads/2023/04/oj-1080x72019-1-150x106.jpg 150w, https://otus.ru/journal/wp-content/uploads/2023/04/oj-1080x72019-1-300x212.jpg 300w, https://otus.ru/journal/wp-content/uploads/2023/04/oj-1080x72019-1-1024x724.jpg 1024w, https://otus.ru/journal/wp-content/uploads/2023/04/oj-1080x72019-1-768x543.jpg 768w, https://otus.ru/journal/wp-content/uploads/2023/04/oj-1080x72019-1-1536x1086.jpg 1536w" data-src="https://otus.ru/journal/wp-content/uploads/2023/04/oj-1080x72019-1-150x106.jpg" data-sizes="(max-width: 150px) 100vw, 150px" title="Модульное тестирование от А до Я" /> </a>
<div class="post-meta">
<span class="label">Prev Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/modulnoe-testirovanie-ot-a-do-ya/" data-wpel-link="internal">Модульное тестирование от А до Я</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/modulnoe-testirovanie-ot-a-do-ya/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2023-04-08T23:46:38+00:00">8 апреля, 2023</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">15 Mins Read</span>
</div>
</div> </div>
</span>
</div>
<div class="post next cf">
<a href="https://otus.ru/journal/xml-ot-a-do-ya/" title="Next Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-right"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/xml-ot-a-do-ya/" class="image-link" rel="next" data-wpel-link="internal">
<img width="150" height="106" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20106%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="XML от А до Я" decoding="async" data-srcset="https://otus.ru/journal/wp-content/uploads/2023/04/oj-1080x72021-1-150x106.jpg 150w, https://otus.ru/journal/wp-content/uploads/2023/04/oj-1080x72021-1-300x212.jpg 300w, https://otus.ru/journal/wp-content/uploads/2023/04/oj-1080x72021-1-1024x724.jpg 1024w, https://otus.ru/journal/wp-content/uploads/2023/04/oj-1080x72021-1-768x543.jpg 768w, https://otus.ru/journal/wp-content/uploads/2023/04/oj-1080x72021-1-1536x1086.jpg 1536w" data-src="https://otus.ru/journal/wp-content/uploads/2023/04/oj-1080x72021-1-150x106.jpg" data-sizes="(max-width: 150px) 100vw, 150px" title="XML от А до Я" /> </a>
<div class="post-meta">
<span class="label">Next Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/xml-ot-a-do-ya/" data-wpel-link="internal">XML от А до Я</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/xml-ot-a-do-ya/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2023-04-09T00:25:53+00:00">9 апреля, 2023</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">10 Mins Read</span>
</div>
</div> </div>
</span>
</div>
</div>
<section class="related-posts grid-3">
<h4 class="section-head"><span class="title">Читать ещё</span></h4>
<div class="ts-row posts cf">
<article class="post col-4">
<a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" title="Уровень готовности CTO к 2026" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Уровень готовности CTO к 2026" title="Уровень готовности CTO к 2026" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" class="post-link" data-wpel-link="internal">Уровень готовности CTO к 2026</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-16T19:50:59+00:00">16 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" title="Новые уроки ноября: только топ-темы по программированию" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Новые уроки ноября: только топ-темы по программированию" title="Новые уроки ноября: только топ-темы по программированию" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" class="post-link" data-wpel-link="internal">Новые уроки ноября: только топ-темы по программированию</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-09T23:24:11+00:00">9 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/schjot-idjot-na-chasy/" title="Счёт идёт на часы" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Счёт идёт на часы" title="Счёт идёт на часы" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-370x245.png 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/schjot-idjot-na-chasy/" class="post-link" data-wpel-link="internal">Счёт идёт на часы</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-10-30T15:04:59+00:00">30 октября, 2025</time>
</div>
</div>
</article >
</div>
</section>
</article> <!-- .the-post -->
</div>
<aside class="col-4 sidebar">
<div class="inner">
<ul>
<li id="search-2" class="widget widget_search"><h5 class="widget-title"><span>Поиск по блогу</span></h5>
<form method="get" class="search-form" action="https://otus.ru/journal/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Введите запрос и нажмите Enter" value="" name="s" title="Search for:" />
</label>
<button type="submit" class="search-submit"><i class="fa fa-search"></i></button>
</form>
</li>
<li id="tag_cloud-5" class="widget widget_tag_cloud"><h5 class="widget-title"><span>Метки</span></h5><div class="tagcloud"><a href="https://otus.ru/journal/tag/android-2/" class="tag-cloud-link tag-link-74 tag-link-position-1" style="font-size: 12.472222222222pt;" aria-label="Android (34 элемента)" data-wpel-link="internal">Android</a>
<a href="https://otus.ru/journal/tag/c-3/" class="tag-cloud-link tag-link-91 tag-link-position-2" style="font-size: 10.916666666667pt;" aria-label="C (23 элемента)" data-wpel-link="internal">C</a>
<a href="https://otus.ru/journal/tag/c-2/" class="tag-cloud-link tag-link-81 tag-link-position-3" style="font-size: 12.666666666667pt;" aria-label="C# (35 элементов)" data-wpel-link="internal">C#</a>
<a href="https://otus.ru/journal/tag/c/" class="tag-cloud-link tag-link-20 tag-link-position-4" style="font-size: 12.472222222222pt;" aria-label="c++ (34 элемента)" data-wpel-link="internal">c++</a>
<a href="https://otus.ru/journal/tag/computer-science/" class="tag-cloud-link tag-link-209 tag-link-position-5" style="font-size: 15.972222222222pt;" aria-label="computer science (78 элементов)" data-wpel-link="internal">computer science</a>
<a href="https://otus.ru/journal/tag/css/" class="tag-cloud-link tag-link-288 tag-link-position-6" style="font-size: 8.6805555555556pt;" aria-label="CSS (13 элементов)" data-wpel-link="internal">CSS</a>
<a href="https://otus.ru/journal/tag/data-science/" class="tag-cloud-link tag-link-151 tag-link-position-7" style="font-size: 8pt;" aria-label="Data Science (11 элементов)" data-wpel-link="internal">Data Science</a>
<a href="https://otus.ru/journal/tag/devops/" class="tag-cloud-link tag-link-98 tag-link-position-8" style="font-size: 10.138888888889pt;" aria-label="devops (19 элементов)" data-wpel-link="internal">devops</a>
<a href="https://otus.ru/journal/tag/docker/" class="tag-cloud-link tag-link-143 tag-link-position-9" style="font-size: 8.2916666666667pt;" aria-label="Docker (12 элементов)" data-wpel-link="internal">Docker</a>
<a href="https://otus.ru/journal/tag/gamedev/" class="tag-cloud-link tag-link-25 tag-link-position-10" style="font-size: 11.694444444444pt;" aria-label="gamedev (28 элементов)" data-wpel-link="internal">gamedev</a>
<a href="https://otus.ru/journal/tag/hr/" class="tag-cloud-link tag-link-103 tag-link-position-11" style="font-size: 8pt;" aria-label="hr (11 элементов)" data-wpel-link="internal">hr</a>
<a href="https://otus.ru/journal/tag/html/" class="tag-cloud-link tag-link-217 tag-link-position-12" style="font-size: 11.208333333333pt;" aria-label="HTML (25 элементов)" data-wpel-link="internal">HTML</a>
<a href="https://otus.ru/journal/tag/ios/" class="tag-cloud-link tag-link-101 tag-link-position-13" style="font-size: 8.9722222222222pt;" aria-label="iOS (14 элементов)" data-wpel-link="internal">iOS</a>
<a href="https://otus.ru/journal/tag/it/" class="tag-cloud-link tag-link-50 tag-link-position-14" style="font-size: 10.527777777778pt;" aria-label="IT (21 элемент)" data-wpel-link="internal">IT</a>
<a href="https://otus.ru/journal/tag/java/" class="tag-cloud-link tag-link-75 tag-link-position-15" style="font-size: 15.680555555556pt;" aria-label="Java (73 элемента)" data-wpel-link="internal">Java</a>
<a href="https://otus.ru/journal/tag/javascript/" class="tag-cloud-link tag-link-83 tag-link-position-16" style="font-size: 14.319444444444pt;" aria-label="JavaScript (53 элемента)" data-wpel-link="internal">JavaScript</a>
<a href="https://otus.ru/journal/tag/linux/" class="tag-cloud-link tag-link-141 tag-link-position-17" style="font-size: 11.888888888889pt;" aria-label="Linux (29 элементов)" data-wpel-link="internal">Linux</a>
<a href="https://otus.ru/journal/tag/machine-learning/" class="tag-cloud-link tag-link-167 tag-link-position-18" style="font-size: 8.6805555555556pt;" aria-label="Machine Learning (13 элементов)" data-wpel-link="internal">Machine Learning</a>
<a href="https://otus.ru/journal/tag/otus-book/" class="tag-cloud-link tag-link-261 tag-link-position-19" style="font-size: 9.9444444444444pt;" aria-label="otus book (18 элементов)" data-wpel-link="internal">otus book</a>
<a href="https://otus.ru/journal/tag/php/" class="tag-cloud-link tag-link-45 tag-link-position-20" style="font-size: 10.527777777778pt;" aria-label="PHP (21 элемент)" data-wpel-link="internal">PHP</a>
<a href="https://otus.ru/journal/tag/python/" class="tag-cloud-link tag-link-27 tag-link-position-21" style="font-size: 16.944444444444pt;" aria-label="Python (99 элементов)" data-wpel-link="internal">Python</a>
<a href="https://otus.ru/journal/tag/qa/" class="tag-cloud-link tag-link-155 tag-link-position-22" style="font-size: 11.402777777778pt;" aria-label="qa (26 элементов)" data-wpel-link="internal">qa</a>
<a href="https://otus.ru/journal/tag/sql/" class="tag-cloud-link tag-link-38 tag-link-position-23" style="font-size: 12.861111111111pt;" aria-label="SQL (37 элементов)" data-wpel-link="internal">SQL</a>
<a href="https://otus.ru/journal/tag/team-lead/" class="tag-cloud-link tag-link-364 tag-link-position-24" style="font-size: 9.9444444444444pt;" aria-label="team lead (18 элементов)" data-wpel-link="internal">team lead</a>
<a href="https://otus.ru/journal/tag/unity/" class="tag-cloud-link tag-link-24 tag-link-position-25" style="font-size: 8pt;" aria-label="unity (11 элементов)" data-wpel-link="internal">unity</a>
<a href="https://otus.ru/journal/tag/algoritmy/" class="tag-cloud-link tag-link-30 tag-link-position-26" style="font-size: 9.9444444444444pt;" aria-label="Алгоритмы (18 элементов)" data-wpel-link="internal">Алгоритмы</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh/" class="tag-cloud-link tag-link-40 tag-link-position-27" style="font-size: 10.138888888889pt;" aria-label="Базы данных (19 элементов)" data-wpel-link="internal">Базы данных</a>
<a href="https://otus.ru/journal/tag/matematika/" class="tag-cloud-link tag-link-44 tag-link-position-28" style="font-size: 10.916666666667pt;" aria-label="Математика (23 элемента)" data-wpel-link="internal">Математика</a>
<a href="https://otus.ru/journal/tag/arhitektura-po/" class="tag-cloud-link tag-link-10 tag-link-position-29" style="font-size: 9.4583333333333pt;" aria-label="архитектура ПО (16 элементов)" data-wpel-link="internal">архитектура ПО</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh-2/" class="tag-cloud-link tag-link-251 tag-link-position-30" style="font-size: 10.138888888889pt;" aria-label="базы данных (19 элементов)" data-wpel-link="internal">базы данных</a>
<a href="https://otus.ru/journal/tag/vebinar/" class="tag-cloud-link tag-link-201 tag-link-position-31" style="font-size: 13.930555555556pt;" aria-label="вебинар (48 элементов)" data-wpel-link="internal">вебинар</a>
<a href="https://otus.ru/journal/tag/dajdzhest/" class="tag-cloud-link tag-link-308 tag-link-position-32" style="font-size: 10.722222222222pt;" aria-label="дайджест (22 элемента)" data-wpel-link="internal">дайджест</a>
<a href="https://otus.ru/journal/tag/zapis-vebinara/" class="tag-cloud-link tag-link-226 tag-link-position-33" style="font-size: 14.902777777778pt;" aria-label="запись вебинара (61 элемент)" data-wpel-link="internal">запись вебинара</a>
<a href="https://otus.ru/journal/tag/zapis-uroka/" class="tag-cloud-link tag-link-272 tag-link-position-34" style="font-size: 16.069444444444pt;" aria-label="запись урока (80 элементов)" data-wpel-link="internal">запись урока</a>
<a href="https://otus.ru/journal/tag/informacionnaya-bezopasnost/" class="tag-cloud-link tag-link-232 tag-link-position-35" style="font-size: 10.138888888889pt;" aria-label="информационная безопасность (19 элементов)" data-wpel-link="internal">информационная безопасность</a>
<a href="https://otus.ru/journal/tag/karera-v-it/" class="tag-cloud-link tag-link-292 tag-link-position-36" style="font-size: 9.9444444444444pt;" aria-label="карьера в IT (18 элементов)" data-wpel-link="internal">карьера в IT</a>
<a href="https://otus.ru/journal/tag/podborka/" class="tag-cloud-link tag-link-7 tag-link-position-37" style="font-size: 12.666666666667pt;" aria-label="подборка (35 элементов)" data-wpel-link="internal">подборка</a>
<a href="https://otus.ru/journal/tag/podborka-statej/" class="tag-cloud-link tag-link-219 tag-link-position-38" style="font-size: 15.777777777778pt;" aria-label="подборка статей (75 элементов)" data-wpel-link="internal">подборка статей</a>
<a href="https://otus.ru/journal/tag/programmirovanie/" class="tag-cloud-link tag-link-65 tag-link-position-39" style="font-size: 22pt;" aria-label="программирование (332 элемента)" data-wpel-link="internal">программирование</a>
<a href="https://otus.ru/journal/tag/proekt/" class="tag-cloud-link tag-link-321 tag-link-position-40" style="font-size: 11.888888888889pt;" aria-label="проект (29 элементов)" data-wpel-link="internal">проект</a>
<a href="https://otus.ru/journal/tag/proektnaya-rabota/" class="tag-cloud-link tag-link-310 tag-link-position-41" style="font-size: 11.597222222222pt;" aria-label="проектная работа (27 элементов)" data-wpel-link="internal">проектная работа</a>
<a href="https://otus.ru/journal/tag/seti/" class="tag-cloud-link tag-link-181 tag-link-position-42" style="font-size: 12.958333333333pt;" aria-label="сети (38 элементов)" data-wpel-link="internal">сети</a>
<a href="https://otus.ru/journal/tag/testirovanie/" class="tag-cloud-link tag-link-69 tag-link-position-43" style="font-size: 13.930555555556pt;" aria-label="тестирование (48 элементов)" data-wpel-link="internal">тестирование</a>
<a href="https://otus.ru/journal/tag/upravlenie-komandoj/" class="tag-cloud-link tag-link-63 tag-link-position-44" style="font-size: 11.694444444444pt;" aria-label="управление командой (28 элементов)" data-wpel-link="internal">управление командой</a>
<a href="https://otus.ru/journal/tag/habr-2/" class="tag-cloud-link tag-link-203 tag-link-position-45" style="font-size: 13.930555555556pt;" aria-label="хабр (48 элементов)" data-wpel-link="internal">хабр</a></div>
</li>
</ul>
</div>
</aside>
</div> <!-- .ts-row -->
</div> <!-- .main -->
<footer class="main-footer dark bold">
<section class="lower-footer cf">
<div class="wrap">
<div class="links">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov-1" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
<p class="copyright"> © 2015-2026 OTUS </p>
<div class="to-top">
<a href="#" class="back-to-top"><i class="fa fa-angle-up"></i> Top</a>
</div>
</div>
</section>
</footer>
</div> <!-- .main-wrap -->
<div class="mobile-menu-container off-canvas" id="mobile-menu">
<a href="#" class="close"><i class="fa fa-times"></i></a>
<div class="logo">
</div>
<ul class="mobile-menu"></ul>
</div>
<div class="search-modal-wrap">
<div class="search-modal-box" role="dialog" aria-modal="true">
<form method="get" class="search-form" action="https://otus.ru/journal/">
<input type="search" class="search-field" name="s" placeholder="Search..." value="" required />
<button type="submit" class="search-submit visuallyhidden">Submit</button>
<p class="message">
Type above and press <em>Enter</em> to search. Press <em>Esc</em> to cancel. </p>
</form>
</div>
</div>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/js/url-span.js" id="wbcr-comments-plus-url-span-js"></script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js" id="ez-toc-js-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/custom-script.js" id="custom-script-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/magnific-popup.js" id="magnific-popup-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.fitvids.js" id="jquery-fitvids-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/imagesloaded.min.js" id="imagesloaded-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/object-fit-images.js" id="object-fit-images-js"></script>
<script type="text/javascript" id="contentberg-theme-js-extra">
/* <![CDATA[ */
var Bunyad = {"custom_ajax_url":"\/journal\/matplotlib-ot-a-do-ya\/"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theme.js" id="contentberg-theme-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theia-sticky-sidebar.js" id="theia-sticky-sidebar-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.slick.js" id="jquery-slick-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jarallax.js" id="jarallax-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/masonry.min.js" id="masonry-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.masonry.min.js" id="jquery-masonry-js"></script>
</body>
</html>
<!-- Cache served by breeze CACHE - Last modified: Tue, 10 Mar 2026 16:30:17 GMT -->