Основы построения графиков#
Для построения графиков в Python разработано целое множество инструментов (библиотек): matplotlib, plotly, seaborn и др.
Каждый из указанных инструментов разработан для решения определённых задач. Например, библиотека matplotlib, разработанная в конце XX века в NASA, является универсальным инструментом построения графиков в окнах операционной системы: с её помощью можно строить самые разнообразные двухмерные и трёхмерные графики и даже создавать анимированные визуализации.
Остальные библиотеки визуализации данных вдохновлены matplotlib и упрощают создание сложных и красивых графиков. Так, с помощью plotly строят графики, с которыми можно взаимодействовать в браузере, так как данная библиотека основана на JavaScript. Такой подход значительно упрощает и совершенствует обмен результатами обработки данных между различными учёными, инженерами и их группами. Инструмент seaborn заточен под визуализацию статистических данных, поэтому нашёл широкое применение в науке о данных, машинном обучении и т.п.
Note
Всю необходимую информацию по наиболее распространённым способам визуализации данных вы можете найти в книге “Python для сложных задач”.
Note
Исчерпывающим источником информации по различным python-библиотекам является их документация.
В данном разделе мы рассмотрим основы создания графика только одним инструментом - matplotlib. Освоив его, вы с лёгкостью научитесь пользоваться любым другим пакетом визуализации данных в Python.
В качестве функции рассмотрим кубическую параболу:
которую изобразим в пределах \(x \in [-2, 2]\).
Данные для визуализации#
Прежде чем построить какой-либо график, что-либо визуализировать, и не важно каким конкретно инструментом это самое что-либо нужно рассчитать или загрузить из базы данных. Мы будем рассчитывать. Опишем нашу функцию \(f(x)\):
def f_cubic(x):
return x**3
Теперь инициализируем numpy-массив x
из 101 значения в указанных выше пределах \(x \in [-2, 2]\):
import numpy as np
# Разобьём интервал на 100 отрезков
x = np.linspace(-2, 2, 101)
Вызываем f_cubic(...)
и получаем массив y
:
y = f_cubic(x)
Всё готово для построения графика.
matplotlib#
Для начала импортируем соответствующий инструмент - модуль pyplot. Это принято делать так:
import matplotlib.pyplot as plt
В пакете pyplot реализованы классы и функции построения графиков в Matlab-стиле.
pyplot построен в парадигме объектно-ориентированного программирования, т.е. графики (их оси, метки, линии и т.д.) являются объектами, хранящими в себе всю необходимую информацию. При этом существуют два подхода к визуализации с помощью pyplot:
стиль Matlab и
объектно-ориентированный стиль.
Стиль MATLAB#
График строится без явного создания объектов модуля pyplot.
plt.plot(x, y);
# Оператор ";" в данном случае нужен для того,
# чтобы не выводилась техническая информация о созданном окне.
# При запуске кода из консоли эта информация не будет выводиться,
# в таком случае оператор ";" ни на что не влияет.

Только и всего!
Объектно-ориентированный стиль#
В этом случае мы явно создаём фигуру (рисунок) типа plt.figure
и ось типа plt.axis
. Сделать это можно несколькими способами.
Например, так:
fig = plt.figure()
ax = fig.add_axes([.1, .1, .8, .8])
# Список, переданный add_axes(...) в качестве аргумента,
# описывает прямоугольник "рабочего поля" (оси plt.axis) -
# то, что очерчено чёрными осями.
# Первые два значения - координата левой нижней точки прямоугольника
# в относительных (от 0 до 1) координатах окна;
# вторые два значения - ширина и высота этого прямоугольника
# в тех же координатах.

Или с помощью функции plt.subplots
, которая возвращает кортеж вида
(plt.figure, plt.axes)
:
fig, ax = plt.subplots()
# Кортеж сразу распакован

Attention
axis - это ось, ед. число; axes - оси во множ. числе.
В общем случае plt.subplots
возвращает массив осей, но по умолчанию ось всего одна, поэтому возвращённый экземпляр в данном случае имеет тип plt.axis
вместо plt.axes
.
Теперь у нас есть два объекта с именами fig
(фигура, рисунок, окно типа plt.figure
) и ax
(ось типа plt.axis
).
В терминах matplotlib fig
- это окно, т.е. весь рисунок выше; ax
- это область, ограниченная числовыми осями графика.
Отрисовка происходит непосредственно через объект оси ax
:
fig, ax = plt.subplots()
ax.plot(x, y);

Note
Может возникнуть вопрос. Зачем создавать объекты явно (2 или 3 строки кода) вместо того, чтобы использовать неявный метод (1 строка кода)? Дело в том, что явным методом возможно строить очень сложные графики, в т.ч. трёхмерные. Неявный метод для этого не подходит.
Вот таким образом строятся плоские графики с помощью matplotlib.