Открыть сервис

Matplotlib

Matplotlib — это библиотека для языка программирования Python, предназначенная для визуализации данных двумерной и трёхмерной графики. Она позволяет создавать статические, анимированные и интерактивные изображения, включая линейные графики, гистограммы, круговые диаграммы, контурные и точечные графики. Matplotlib является одной из наиболее распространённых библиотек визуализации в научных и инженерных расчётах, машинном обучении и анализе данных.

История

Библиотека была создана в 2002 году Джоном Хантером (John D. Hunter) как альтернатива проприетарным инструментам визуализации, используемым в MATLAB. Изначально проект назывался «matplotlib» как сокращение от «MATLAB plotting library». Первый публичный релиз состоялся в 2003 году. После смерти Хантера в 2012 году развитие библиотеки продолжило сообщество разработчиков.

Ключевые вехи развития:

  • 2003 — версия 0.1 с базовыми возможностями построения графиков.
  • 2005 — версия 0.50, введение объектно-ориентированного интерфейса.
  • 2010 — версия 1.0, стабилизация API.
  • 2012 — переход управления проектом к сообществу, создание организации NumFOCUS.
  • 2017 — версия 2.0, значительное обновление стилей по умолчанию.
  • 2020 — версия 3.3, улучшение поддержки анимации и интерактивности.
  • 2025 — актуальная стабильная версия 3.9.x.

Архитектура и принципы работы

Matplotlib построена на двух основных интерфейсах:

Pyplot (процедурный интерфейс)

Модуль matplotlib.pyplot предоставляет функции, имитирующие стиль MATLAB. Пользователь последовательно вызывает функции (plot(), xlabel(), show()), которые работают с текущей системой координат (axes). Этот интерфейс удобен для быстрого построения простых графиков и интерактивной работы.

Объектно-ориентированный интерфейс

Позволяет явно создавать и манипулировать объектами: Figure (холст), Axes (оси), Artist (элементы графика). Этот подход даёт полный контроль над компоновкой, стилями и вложенными графиками.

Основные компоненты

  • Figureконтейнер верхнего уровня, содержащий все элементы графика.
  • Axes — область с координатными осями, на которой отображаются данные. Одна Figure может содержать несколько Axes.
  • Axisобъект, управляющий отображением числовых или категориальных значений на оси.
  • Artist — все видимые элементы (линии, текст, маркеры, легенда).

Классификация типов графиков

Matplotlib поддерживает широкий спектр диаграмм и графиков, которые можно разделить на несколько категорий:

Основные типы

  • Линейные графикиplot() для отображения зависимостей y от x.
  • Гистограммыhist() для распределения частот.
  • Столбчатые диаграммыbar() и barh() для сравнения категорий.
  • Круговые диаграммыpie() для долей целого.
  • Точечные диаграммыscatter() для корреляций.
  • Ящики с усамиboxplot() для статистических распределений.

Специализированные типы

  • Контурные графикиcontour() и contourf() для трёхмерных поверхностей на плоскости.
  • Трёхмерные графики — модуль mplot3d для построения поверхностей, каркасов и точек в 3D.
  • Полярные графикиpolar() для данных в полярных координатах.
  • Стековые графикиstackplot() для накопленных областей.
  • Тепловые картыimshow() для отображения матриц цветом.

Применение

Matplotlib используется в различных областях науки и техники:

Научные исследования

  • Построение графиков экспериментальных данных (физика, химия, биология).
  • Визуализация результатов численного моделирования.
  • Отображение спектров, сигналов и временных рядов.

Анализ данных и машинное обучение

  • Визуализация распределений признаков.
  • Построение кривых обучения и ROC-кривых.
  • Отображение матриц ошибок и кластеров.

Инженерные расчёты

  • Графики передаточных функций и частотных характеристик.
  • Визуализация конечно-элементных моделей.

Образование

  • Демонстрация математических функций и статистических понятий.
  • Создание иллюстраций для учебных пособий.

Интеграция с другими библиотеками

Matplotlib часто используется совместно с другими инструментами экосистемы Python:

  • NumPy — для генерации и обработки числовых данных.
  • Pandas — для построения графиков напрямую из DataFrame через встроенные методы (df.plot()), которые используют Matplotlib как бэкенд.
  • SciPy — для визуализации результатов научных вычислений.
  • Seaborn — надстройка над Matplotlib, предоставляющая высокоуровневые статистические графики с улучшенными стилями.
  • IPython/Jupyter — встроенная поддержка отображения графиков в ноутбуках.

Стили и настройка внешнего вида

Matplotlib предоставляет множество встроенных стилей, которые меняют цветовую палитру, шрифты и оформление:

  • ggplot — стиль, имитирующий библиотеку ggplot2 для R.
  • seaborn-v0_8 — стиль, приближенный к Seaborn.
  • fivethirtyeight — стиль сайта FiveThirtyEight.
  • dark_backgroundтёмная тема.

Пользователь может создавать собственные стили или настраивать параметры через rcParams (глобальные настройки) или локально для каждого графика.

Сохранение и экспорт

Графики можно сохранять в различных растровых (PNG, JPG, TIFF) и векторных (PDF, SVG, EPS) форматах. Поддерживается настройка разрешения (dpi), размера и прозрачности фона.

Интерактивные возможности

Matplotlib поддерживает несколько бэкендов для интерактивной работы:

  • TkAgg — на основе Tkinter.
  • QtAgg — на основе PyQt/PySide.
  • GTK4Agg — на основе GTK.
  • WebAgg — отображение в веб-браузере.
  • nbAgg — интерактивность в Jupyter Notebook.

Анимации создаются с помощью модуля matplotlib.animation, который позволяет генерировать видеофайлы (MP4, GIF) или отображать анимацию в реальном времени.

Ограничения и критика

Несмотря на широкую распространённость, Matplotlib имеет ряд недостатков:

  • Сложность создания сложных композиций — для многоуровневых графиков с вложенными осями требуется значительный объём кода.
  • Устаревший дизайн по умолчанию — до версии 2.0 графики выглядели визуально бедно; после обновления ситуация улучшилась, но по-прежнему уступает современным библиотекам (Plotly, Bokeh).
  • Низкая производительность при больших объёмах данных — отрисовка миллионов точек может быть медленной; для таких задач рекомендуются библиотеки на основе WebGL (например, Datashader).
  • Слабая поддержка интерактивности — встроенные интерактивные возможности (масштабирование, панорамирование) ограничены по сравнению с веб-ориентированными решениями.

Альтернативы

На рынке визуализации данных для Python существуют конкурирующие библиотеки:

  • Seaborn — упрощает создание статистических графиков, но основана на Matplotlib.
  • Plotly — интерактивная библиотека с поддержкой веб-отображения и анимации.
  • Bokeh — ориентирована на интерактивные дашборды и веб-приложения.
  • Altair — декларативная библиотека на основе Vega-Lite.
  • ggplot (для Python) — порт популярной R-библиотеки, ныне неактивен.

Интересные факты

  • Название библиотеки образовано от «mat» (MATLAB) и «plotlib» (plotting library).
  • Matplotlib является частью экосистемы NumFOCUS — некоммерческой организации, поддерживающей открытые научные проекты.
  • Библиотека используется в NASA, CERN и других научных организациях для визуализации данных.
  • В 2019 году проект отметил 100 000 коммитов на GitHub.

Источники

  • Hunter, J. D. (2007). Matplotlib: A 2D Graphics Environment. Computing in Science & Engineering, 9(3), 90–95.
  • Официальная документация Matplotlib (matplotlib.org).
  • Репозиторий проекта на GitHub (github.com/matplotlib/matplotlib).
  • NumFOCUS — спонсорская организация проекта.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →