Начало работы с Matplotlib
Установка Matplotlib, импорт pyplot и создание первого линейного графика с подписями, цветами и настройками.
На этой странице рассмотрено всё необходимое для начала работы с Matplotlib: как установить библиотеку, как её импортировать, как она организована внутри и как создать и настроить первый график. В итоге у вас будет готовый скрипт, формирующий полностью подписанный линейный график.
Установка Matplotlib
Matplotlib не входит в стандартную библиотеку Python, поэтому перед использованием его необходимо установить. Воспользуйтесь pip — менеджером пакетов Python:
pip install matplotlibЕсли вы работаете в виртуальном окружении (рекомендуется), сначала активируйте его, а затем выполните команду выше. Чтобы убедиться в успешной установке и проверить версию:
python -m pip show matplotlibВы должны увидеть вывод примерно следующего вида:
Name: matplotlib
Version: 3.9.x
...Начиная с серии релизов 3.9, Matplotlib требует Python 3.9 или новее.
Импорт Matplotlib
Matplotlib организован в несколько подпакетов. Для повседневного построения графиков вам понадобится только модуль pyplot, который по традиции импортируется под псевдонимом plt:
import matplotlib.pyplot as pltПсевдоним plt — это общепринятое соглашение в сообществе Python. Его использование делает ваш код согласованным с руководствами, документацией и кодом, встречающимся в интернете.
Если вам также нужны числовые массивы (что часто требуется при генерации данных для построения графиков), импортируйте NumPy одновременно:
import matplotlib.pyplot as plt
import numpy as npСтруктура Matplotlib
Понимание двухуровневой структуры Matplotlib позволяет избежать многих затруднений:
- Figure — контейнер верхнего уровня. Представьте его как холст или окно. Figure может содержать один или несколько объектов Axes.
- Axes — отдельная область графика со своими осью X, осью Y, заголовком и данными. Слово «Axes» обозначает не только линии осей, а всю область построения.
Matplotlib предоставляет два интерфейса для работы с этими объектами:
| Интерфейс | Когда использовать |
|---|---|
| pyplot (конечный автомат) | Быстрые интерактивные скрипты и ноутбуки |
| Объектно-ориентированный (OO) | Многопанельные фигуры, повторно используемые функции, production-код |
Интерфейс pyplot управляет текущими Figure и Axes за вас. OO-интерфейс предоставляет явные дескрипторы, что позволяет точно управлять каждым объектом. Оба интерфейса дают идентичный результат; разница заключается в организации кода.
Создание первого графика
Функция plt.plot() рисует линию через последовательность пар (x, y). Передайте два списка одинаковой длины — один для значений x и один для значений y:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [1, 4, 9, 16]
plt.plot(x, y)
plt.show()plt.show() отображает фигуру на экране. В терминальном скрипте выполнение приостанавливается до закрытия окна графика. В Jupyter notebook график отображается inline, а plt.show() необязателен.
Добавление подписей и заголовка
График без подписей сложно интерпретировать. Добавьте подписи осей и заголовок тремя однострочными вызовами:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [1, 4, 9, 16]
plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('y = x²')
plt.title('Square Numbers')
plt.show()plt.xlabel()— подпись горизонтальной оси.plt.ylabel()— подпись вертикальной оси.plt.title()— заголовок, отображаемый над графиком.
Настройка цвета и стиля линии
Передайте именованные аргументы в plt.plot(), чтобы изменить внешний вид линии:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [1, 4, 9, 16]
plt.plot(x, y, color='steelblue', linewidth=2, linestyle='--')
plt.xlabel('x')
plt.ylabel('y = x²')
plt.title('Square Numbers')
plt.show()Распространённые параметры:
| Параметр | Примеры значений | Эффект |
|---|---|---|
color | 'red', 'steelblue', '#2ca02c' | Цвет линии |
linewidth | 1, 2, 3 | Толщина линии в пунктах |
linestyle | '-', '--', ':', '-.' | Сплошная, пунктирная, точечная, штрихпунктирная |
Также можно использовать сокращённую строку формата в качестве третьего позиционного аргумента. 'r--' означает красную пунктирную линию, 'bs' — синие квадраты, 'g^' — зелёные треугольники:
plt.plot(x, y, 'r--')Установка пределов осей
По умолчанию Matplotlib выбирает пределы осей, соответствующие данным. Вы можете переопределить их:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [1, 4, 9, 16]
plt.plot(x, y)
plt.xlim(0, 5)
plt.ylim(0, 20)
plt.show()plt.xlim(min, max) и plt.ylim(min, max) задают видимый диапазон каждой оси. Это полезно, когда нужно выделить определённую область или сохранить одинаковые оси для нескольких графиков.
Построение нескольких линий
Вызовите plt.plot() несколько раз до plt.show(), чтобы наложить несколько линий на одни и те же Axes. Добавьте аргумент label в каждый вызов, а затем вызовите plt.legend() для отображения легенды:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y_sq = [1, 4, 9, 16, 25]
y_cb = [1, 8, 27, 64, 125]
plt.plot(x, y_sq, color='steelblue', label='x²')
plt.plot(x, y_cb, color='tomato', label='x³')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Comparing Growth')
plt.legend()
plt.show()plt.legend() считывает строку label из каждого вызова plot() и автоматически строит легенду. Разместите его перед plt.show().
Объектно-ориентированный интерфейс
Для всего, что сложнее одного простого графика, OO-интерфейс нагляднее и проще в обслуживании. Создайте Figure и один или несколько Axes с помощью plt.subplots(), а затем вызывайте методы непосредственно на объекте ax:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y_sq = [1, 4, 9, 16, 25]
y_cb = [1, 8, 27, 64, 125]
fig, ax = plt.subplots()
ax.plot(x, y_sq, color='steelblue', label='x²')
ax.plot(x, y_cb, color='tomato', label='x³')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_title('Comparing Growth')
ax.legend()
ax.grid(True)
plt.show()Имена методов OO-интерфейса дублируют функции pyplot с префиксом set_: plt.xlabel() становится ax.set_xlabel(), plt.title() становится ax.set_title() и так далее. Явный дескриптор ax устраняет неоднозначность — сразу понятно, какой именно график вы изменяете, что особенно важно, когда Figure содержит несколько подграфиков.
Сохранение графика в файл
Вызовите plt.savefig() вместо (или вдобавок к) plt.show(), чтобы записать фигуру на диск:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [1, 4, 9, 16]
plt.plot(x, y, color='steelblue', linewidth=2)
plt.xlabel('x')
plt.ylabel('y = x²')
plt.title('Square Numbers')
plt.savefig('square_numbers.png', dpi=150, bbox_inches='tight')Matplotlib определяет формат файла по расширению. Распространённые форматы: .png, .pdf, .svg, .jpg. Аргумент dpi управляет разрешением (для отчётов обычно используется 150–300 dpi). bbox_inches='tight' обрезает лишние отступы по краям.
Распространённые ловушки
Вызывайте plt.show() только один раз. Многократный вызов в одном скрипте может привести к появлению пустых фигур, поскольку Matplotlib очищает текущую фигуру после её отображения.
Порядок имеет значение при работе с pyplot. Вызовы настроек (plt.xlabel(), plt.title() и т. д.) должны быть до plt.show().
Повторное использование фигуры. Если вы строите график в цикле и забываете его очистить, данные предыдущих итераций накапливаются. Вызывайте plt.clf() (очистить фигуру) или plt.close() между итерациями, либо каждый раз создавайте новую пару fig, ax = plt.subplots().
Неинтерактивные бэкенды. На серверах без дисплея (CI, Docker-контейнеры) plt.show() может вызвать ошибку. Установите бэкенд до импорта pyplot:
import matplotlib
matplotlib.use('Agg') # non-interactive PNG backend
import matplotlib.pyplot as pltСледующие шаги
Теперь, когда вы умеете создавать базовый график, изучите посвящённые разделы:
- Matplotlib Pyplot — подробный разбор функций pyplot и типов графиков
- Matplotlib Line Plots — стилизация линий, маркеров и заливки между линиями
- Matplotlib Labels — подписи осей, заголовки, аннотации
- Matplotlib Markers — маркеры точек данных и их стили
- Matplotlib Grid — добавление и настройка линий сетки
- Matplotlib Subplots — размещение нескольких графиков в одной фигуре
- Matplotlib Bar Charts — вертикальные и горизонтальные столбчатые диаграммы
- Matplotlib Scatter Plots — диаграммы рассеяния двух переменных
- Matplotlib Histograms — распределения частот
- Matplotlib Pie Charts — пропорциональные данные