Matplotlib — графики
Matplotlib — основная библиотека Python для графиков по числам: линия y = f(x), столбцы, точки, гистограммы, круговые диаграммы, несколько графиков на одном листе. Её ставят в школе и вузе (график функции, лабораторная по физике), в аналитике (отчёты, дашборды) и в научных статьях (PNG, PDF для публикации).
Эта глава — теория и минимальные примеры. Готовая галерея скриптов с разбором каждой строки — Matplotlib — графики (примеры).
База Python — первая программа, точка входа main, venv и pip install. Массивы для осей X и Y — примеры NumPy. Таблицы перед графиком — примеры Pandas, NumPy и pandas. Символьные формулы (корни, производная f′) перед построением кривой — SymPy — уравнения и производные. Рисование фигур «от руки» — Turtle, в браузере — SVG или p5.js; статистические графики поверх Matplotlib — Seaborn в том же разделе.
Matplotlib и другая «графика» в Python
В Python слово «графика» встречается в разных контекстах. Matplotlib решает задачу диаграмм и графиков функций, а не игр или векторного рисования.
| Инструмент | Что рисуем | Типичная задача |
|---|---|---|
| Matplotlib | Графики по осям X и Y | sin(x), продажи по месяцам, гистограмма оценок |
| Turtle | Линии и фигуры «черепашкой» | Квадрат, снежинка, узор в цикле |
| Panda3D | 3D-сцены | Куб, текстуры, игровой мир |
| Pygame | 2D-игры | Спрайты, коллизии, счёт |
| Seaborn | Статистика поверх Matplotlib | box plot, heatmap корреляций |
| Plotly | Интерактив в браузере | Дашборд с zoom и подсказками |
Turtle учит координатам и циклам через движение пера. Matplotlib учит представлять таблицы и формулы как картинку для отчёта. Обе темы полезны новичку; для поиска «построить график sin python» нужен именно Matplotlib.
Установка
Matplotlib не входит в минимальную поставку Python — пакет ставят через pip:
pip install matplotlib numpy
Разбор:
matplotlib— сама библиотека графиков.numpy— массивы и sin, cos, linspace; почти все учебные примеры используют оба пакета.
В проекте зависимости фиксируют в requirements.txt (см. главу про venv и зависимости):
matplotlib>=3.8
numpy>=1.26
Архитектура
Matplotlib унаследовал модель из MATLAB. Полезно держать в голове три уровня:
| Объект | Роль |
|---|---|
Figure | Окно или «лист» — контейнер верхнего уровня |
Axes | Область с осями X и Y, куда наносятся данные |
Artist | Всё, что видно: линия, текст, легенда, сетка |
Схема для одного простого графика:
Figure
└── Axes
├── line (plot)
├── xlabel, ylabel, title
├── legend
└── grid
Pyplot и объектный стиль
Процедурный интерфейс matplotlib.pyplot (импорт as plt) — короткие команды в духе MATLAB:
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [1, 4, 9])
plt.title("Парабола")
plt.show()
Объектный стиль — явные fig и ax; рекомендуется для отчётов, подграфиков и встраивания в GUI:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [1, 4, 9])
ax.set_title("Парабола")
fig.savefig("parabola.png")
plt.show()
Разбор:
plt.subplots()создаёт пару Figure + Axes.ax.plot(...)рисует на конкретных осях — так проще несколько графиков на одном листе без путаницы «какой plt сейчас активен».fig.savefig(...)сохраняет фигуру, а не «текущее окно» pyplot.
Первые 10–20 скриптов — через plt.plot и plt.show(). Как только понадобятся два графика рядом или сохранение в файл — переходите на fig, ax = plt.subplots().
Первый график
Минимальный рабочий скрипт — линейный график функции:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y, label="sin(x)")
plt.xlabel("x")
plt.ylabel("sin(x)")
plt.title("Синусоида")
plt.legend()
plt.grid(True)
plt.show()
Разбор:
np.linspace(0, 10, 100)— 100 равномерных точек от 0 до 10; линия гладкая.np.sin(x)— синус для всех x сразу (векторизация NumPy).plt.plot(x, y, label=...)— линия;labelнужен для легенды.xlabel,ylabel,title— подписи; в учебной работе без них график считают неоформленным.legend()— расшифровка серий.grid(True)— координатная сетка.show()— показ окна; в.py-файле без неё окно может сразу закрыться.
Парабола без NumPy:
x = list(range(-5, 6)),y = [i**2 for i in x]— см. примеры.
Типы графиков
| Задача | Функция | Когда выбирать |
|---|---|---|
| График функции, тренд во времени | plot | Непрерывная линия, sin, cos, температура по дням |
| Сравнение категорий | bar, barh | Оценки по предметам, популярность языков |
| Связь двух переменных | scatter | Рост и вес, эксперимент «x vs y» |
| Распределение значений | hist | Сколько учеников получили 3, 4, 5 |
| Доли от 100% | pie | Бюджет, состав команды (до 5–6 секторов) |
| Несколько графиков | subplots | Отчёт: 4 диаграммы на одном листе |
| Матрица чисел | imshow | Тепловая карта корреляций |
Подробные скрипты с разбором — в галерее примеров.
Справочник частых команд pyplot
| Действие | Вызов |
|---|---|
| Линия | plt.plot(x, y) |
| Столбцы | plt.bar(categories, values) |
| Точки | plt.scatter(x, y) |
| Гистограмма | plt.hist(data, bins=20) |
| Круговая | plt.pie(sizes, labels=labels) |
| Подпись оси X | plt.xlabel("текст") |
| Заголовок | plt.title("текст") |
| Легенда | plt.legend() |
| Сетка | plt.grid(True) |
| Пределы оси | plt.xlim(0, 10), plt.ylim(-1, 1) |
| Сохранить | plt.savefig("out.png", dpi=150, bbox_inches="tight") |
| Показать | plt.show() |
Объектный эквивалент: ax.plot, ax.set_xlabel, ax.set_title, fig.savefig.
NumPy и Pandas
NumPy готовит числа для осей (подробнее — примеры NumPy в Lab):
import numpy as np
x = np.linspace(0, 2 * np.pi, 200)
y = np.cos(x)
Pandas часто строит график одной строкой — под капотом тот же Matplotlib:
import pandas as pd
df = pd.DataFrame({"month": [1, 2, 3], "sales": [40, 55, 48]})
df.plot(x="month", y="sales", kind="line", legend=False)
Разбор:
df.plot(...)— быстрый EDA (exploratory data analysis) без ручногоplt.plot.- Для курсовой и публикации график из Pandas обычно донастраивают через
ax = df.plot(...)и методыax.set_...или черезplt.gca().
Типовые операции с таблицами — Pandas в лаборатории и раздел 33.
Скрипт, Jupyter и Google Colab
| Среда | Поведение show() |
|---|---|
Файл python grafik.py | Открывает окно, ждёт закрытия |
| Jupyter / Colab | График под ячейкой; %matplotlib inline в старых ноутбуках |
| Сохранение без окна | Только savefig, без show() — для CI и серверов |
На сервере без дисплея (headless) используют backend Agg:
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
Разбор:
Aggрисует в файл, окно не создаётся — типично для cron-отчётов и Docker.
Оформление и стили
plt.style.use("seaborn-v0_8-whitegrid")
plt.plot(x, y)
Разбор:
style.use(...)меняет фон, шрифты и цвета глобально.- Список имён:
print(plt.style.available).
Цвет линии задают параметром color, c или hex #2a9d8f. Толщина — linewidth или lw. Прозрачность — alpha от 0 до 1.
Экспорт в файл
fig, ax = plt.subplots(figsize=(6, 4), dpi=120)
ax.plot(x, y)
fig.tight_layout()
fig.savefig("report.png", bbox_inches="tight")
fig.savefig("report.pdf")
Разбор:
figsize— размер в дюймах; сdpi=120PNG ≈ 720×480 px.tight_layout()— поджимает отступы, подписи не обрезаются.bbox_inches="tight"— обрезка пустых полей при сохранении.- PDF — вектор для Word, LaTeX и печати; вставка графика в отчёт — LaTeX — формулы для отчётов.
Связь с Seaborn и Plotly
Seaborn строит статистические графики (ящик с усами, pairplot, heatmap) и использует Matplotlib как движок. После sns.boxplot(...) можно взять текущие оси и донастроить подписи:
import seaborn as sns
import matplotlib.pyplot as plt
sns.boxplot(x="class", y="score", data=df)
plt.title("Оценки по классам")
plt.show()
Plotly — интерактивность в браузере; для статичной сдачи работы в школе чаще хватает Matplotlib. Сравнение трёх библиотек — в разделе 33.
Интеграция с Turtle и Tkinter
Matplotlib и Turtle решают разные задачи, но оба могут жить в одном окне Tkinter — например, график функции слева и черепашья траектория справа. Пример сборки — в справочнике Turtle. Базовые виджеты окна (кнопки, Frame, mainloop) — в Tkinter — окна и виджеты; теория GUI — 311.md.
Типичные ошибки
- Окно мелькает и закрывается — добавьте
plt.show()в конец скрипта. - Разная длина x и y — массивы должны совпадать по числу элементов.
- Кириллица квадратиками — настройте шрифт (
DejaVu Sansили системный с поддержкой русского). - Пустой график в Jupyter — выполните ячейку заново; при необходимости
%matplotlib inline. - ModuleNotFoundError: matplotlib —
pip install matplotlibв том же venv, откуда запускаете Python.
Ограничения
Matplotlib рассчитан на статичные 2D- и простые 3D-графики (модуль mplot3d). Для интерактивных дашбордов с zoom — Plotly или Dash. Для миллионов точек без агрегации — Datashader или предварительный binning в Pandas. Для игр и анимации персонажей — Pygame или Panda3D, не pyplot.
Производительность: тысячи точек на plot — нормально; десятки тысяч scatter-точек могут тормозить интерактивное окно — уменьшите выборку или используйте alpha и растр.
См. также
- NumPy — массивы и матрицы —
linspace, векторизация,axisперед графиком - Matplotlib — графики (примеры) — галерея: sin, парабола, bar, scatter, hist, subplots, анимация, экспорт
- Анализ данных и научные вычисления — NumPy, Pandas, Seaborn, Plotly в одном маршруте
- Python для анализа данных — описательная статистика и визуализация
- Turtle — черепашья графика для фигур и узоров
- Примеры фигур Turtle — готовые скрипты turtle
- Примеры фигур на Processing/p5.js — рисование фигур в браузере (JavaScript), когда нужен веб, а не график по данным
- SVG — рисунки кодом — векторные иконки и учебные фигуры в
<svg> - Pandas — типовые операции — таблицы перед построением графика
- Tkinter — окна и виджеты — формы и кнопки в одном окне с графиком
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). Python как язык общего назначения - философия, ключевые свойства и области применения в современной разработке. Python — это высокоуровневый язык программирования общего назначения, который отличается читаемым синтаксисом и широким спектром применения. Принципы, которые делают код понятным, поддерживаемым и расширяемым. Примеры реализации типовых приложений. Каждый пример сопровождается разбором ключевых концепций языка. Наверняка каждый новичок, решивший перейти в что-то стандартное в Python, открывает себе этот файл. Как устроен Python, что входит в комплект и какие есть реализации. Структурные каркасы для построения приложений, как они устроены. Фреймворки, библиотеки, инструменты сборки, среды выполнения, системы тестирования и специализированные платформы, объединённые общей философией ясности, простоты и гибкости. Что такое модули, как устроены механизмы импорта и загрузки. Управление изолированной средой и зависимостями проекта. История Python - ключевые этапы развития языка, сообщества и экосистемы инструментов. Философия Python не зафиксирована в официальных стандартах, но она глубоко интегрирована в язык, его стандартную библиотеку, документацию и культуру разработчиков.Python - язык общего назначения
Что требуется знать перед началом изучения языка программирования Python
Рекомендации по разработке на Python
Простые приложения на Python
Встроенный модуль builtins и типизация в Python
Архитектура интерпретатора Python
Фреймворки и библиотеки Python
Экосистема Python-приложений
Модули в Python
Виртуальные окружения и управление зависимостями
История языка Python
Философия Python - Zen of Python