12.1. Теория¶
Текст является одним из лучших способов передачи информации, однако, в ряде случаев, как гласит известная поговорка, «лучше один раз увидеть, чем сто раз услышать».
В Python визуализация данных легко осуществляется с использованием сторонних пакетов, среди которых одним из наиболее известных является библиотека matplotlib.
Содержание
12.1.1. Описание и установка¶
Matplotlib распространяется на условиях BSD-подобной лицензии. Библиотека поддерживает двумерную (2D) и трехмерную (3D) графику, а также анимированные рисунки.
Создаваемые изображения могут быть использованы в мультимедийных приложениях, научных проектах, а также различных документах, публикациях и веб-приложениях. Исторически библиотека формировалась под влиянием математического пакета Matlab, но являлась и является независимым от него проектом. Построенная на принципах ООП, библиотека также имеет процедурный интерфейс pylab, который предоставляет аналоги команд Matlab.
Последняя стабильная версия библиотеки поддерживает Python 2.6 и выше. В курсе рассматривается matplotlib версии 2+.
Пакет поддерживает многие виды диаграмм:
графики;
диаграммы разброса;
столбчатые диаграммы и гистограммы;
круговые диаграммы;
ствол-лист диаграммы;
контурные графики;
поля градиентов;
спектральные диаграммы
и др.
При построении возможно указать оси координат, сетку, добавить аннотации, использовать логарифмическую шкалу или полярные координаты. Созданные изображения могут быть легко сохранены, в частности, в популярные форматы (JPEG, PNG и др.).
Пример изображений приведен на Рисунке 12.1.1.
На странице скриншотов, а также в демонстрационной галерее библиотеки приведен обширный список примеров, включающих изображения и соответствующий код.
Установка
Как и любой пакет matplotlib
можно установить, используя утилиту pip:
pip install matplotlib
pip install matplotlib --upgrade
Пользователям ОС на базе Linux можно воспользоваться пакетным менеджером и установить python3-matplotlib.
После установки проверьте, что библиотека имеет версию 3 и выше:
>>> import matplotlib
>>> matplotlib.__version__
'3.1.2'
Дополнительная информация об установке находится в официальном руководстве по инсталляции.
12.1.2. Основы matplotlib¶
В matplotlib все объекты организованы в единую иерархию:
На вершине иерархии находится конечный автомат (модель, число возможных внутренних состояний которой конечно), предоставляемый модулем
matplotlib.pyplot
. На данном уровне все функции, используемые для рисования диаграмм (линии, рисунки, текст и т.д.) применяются к текущему изображению.На уровне ниже располагается объектно-ориентированный интерфейс, используемый для создания изображений, где объектами являются само изображение, оси координат, графические примитивы и т.д.
12.1.2.1. Типы используемых величин¶
Все функции построения диаграмм ожидают аргументы следующих типов:
np.array
,np.ma.masked_array
- набор или массив значений из пакета NumPy (устанавливается вместе с matplotlib), однако стандартные последовательности Python также допускаются к использованию.
Примечание
NumPy - фундаментальный пакет для научных вычислений на Python, который содержит:
мощный объект - многомерный массив (в т.ч. матрицы);
высокоуровневые функции для работы с массивами, линейной алгеброй и а также быстрого создания набора данных (примерный аналог - функция
range()
);инструменты для интеграции кода на C/C++ и Fortran.
Пакет NumPy не рассматривается отдельно в данном курсе.
12.1.2.2. Основные модули и классы matplotlib¶
12.1.2.2.1. Модуль matplotlib
¶
Модуль верхнего уровня matplotlib
содержит функции для конфигурации библиотеки.
-
matplotlib.
rc
(group, **kwargs)¶ Устанавливает параметры
**kwargs
для группы объектовgroup
(например,"font"
для шрифта).Примечание
Данная функция может оказаться полезной, если шрифт в ОС по умолчанию не поддерживает кириллицу:
import matplotlib # "Включение" поддержки кириллицы matplotlib.rc("font", family="Arial, Ubuntu")
12.1.2.2.2. Элементы изображения¶
На Рисунке 12.1.2 представлены основные элементы изображения.

Рисунок 12.1.2 - Основные элементы изображения в matplotlib¶
Изображение может содержать несколько диаграмм, каждая из которых будет представлять собой Рисунок 12.1.2.
Все элементы изображения унаследованы от класса Artists (модуль artist) и делятся на 2 типа:
Примитивы:
Контейнеры:
12.1.3. Создание изображений¶
12.1.3.1. Построение простой диаграммы¶
Типичный ход построения изображения, как правило, включает следующие шаги:
Создать объект
Figure
.Используя объект
Figure
, добавить координатную плоскостьAxes
(одну или несколько).Используя методы
Axes
, добавить на изображение графические примитивы.Отобразить и/или сохранить изображение.
Пример построения изображения приведен в Листинге 12.1.1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | # 1) Подключение необходимых библиотек
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
if __name__ == "__main__":
# 1.1) "Включение" поддержки кириллицы (при необходимости)
# matplotlib.rc("font", family="Arial, Ubuntu")
# 2) Формирование данных и построение диаграммы
x = np.arange(-8, 3, 0.1) # x - массив np.array
y = abs(x**2 + 4*x - 5)
# Вызов диаграммы нужного типа
fig, ax = plt.subplots()
fig.canvas.set_window_title("Мое первое изображение") # Заголовок окна
ax.grid(True) # Отображение сетки на координатной плоскости
ax.plot(x, y, 'r', linewidth=3) # График красного цвета
# 3) Вывод результата
plt.savefig("my_image.png") # Сохранение изображения
# или
plt.show() # Вывод изображения на экран
|
Одним из способом создания изображения и координатной оси является функция pyplot.subplots().
-
matplotlib.pyplot.
subplots
(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)¶ Некоторые параметры:
- Параметры
nrows (int) – количество координатных плоскостей по вертикали;
ncols (int) – количество координатных плоскостей по горизонтали;
sharex (bool или {"none", "all", "row", "col"}) –
является ли ось OX общей для нескольких плоскостей:
True
или"all"
: оси OX и OY будут общими для всех координатных плоскостей;False
или"none"
: оси OX и OY будут отдельными для каждой координатной плоскости;"row"
: оси OX и OY будут общими для всех координатных плоскостей по вертикали;"col"
: оси OX и OY будут общими для всех координатных плоскостей по горизонтали.
sharey (bool или {"none", "all", "row", "col"}) – является ли ось OY общей для нескольких плоскостей (аналогично параметру „sharex“);
- Результат
кортеж:
Для вывода полученного изображения на экран используется функция pyplot.show().
-
matplotlib.pyplot.
show
(*args, **kw)¶ Выводит изображение на экран в отдельном окне (Рисунок 12.1.3).

Рисунок 12.1.3 - Выполнение кода из Листинга 12.1.1.¶
Кроме диаграммы графическое окно содержит специальные функциональные кнопки (интерактивную навигацию, пронумерована на Рисунке 12.1.3), их назначение и возможности приведены в Таблице 12.1.1.
Номер(а) |
Описание |
---|---|
1 |
Возвращает график к первоначальному состоянию (вид при первом запуске) |
2, 3 |
Перемещает назад / вперед по истории изменения графика. Например, после увеличения определенной области можно вернуться к предыдущему, не увеличенному виду, используя кнопку 2 |
4 |
Перетаскивает (левая кнопка мыши) или масштабирует (правая кнопка мыши) график |
5 |
Масштабирует заданную прямоугольную область графика |
6 |
Открывает дополнительные настройки окна (например, отступы от краев) |
7 |
Вызывает диалог сохранения графика в файл |
Сохранение получившегося изображения также может быть выполнено программно, используя функцию pyplot.savefig().
-
matplotlib.pyplot.
savefig
(fname, dpi=None, facecolor='w', edgecolor='w', orientation='portrait', papertype=None, format=None, transparent=False, bbox_inches=None, pad_inches=0.1, frameon=None)¶ Сохраняет текущее изображение.
Обязательный параметр:
- Параметры
fname – имя файла или файловый объект.
Необязательные параметры контролируют значения dpi (англ. Dots Per Inch - количество точек на дюйм), ориентацию (альбомная или портретная), прозрачность, отступы и т.д.
12.1.3.2. Заголовок диаграммы и подписи осей¶
Диаграмма в maplotlib может иметь:
заголовок (метод Axes.title());
подписи у осей (методы Axes.set_xlabel() и Axes.set_ylabel()).
-
matplotlib.pyplot.
set_title
(label, fontdict=None, loc='center', **kwargs)¶ Установить заголовок диаграммы.
Обязательный параметр:
12.1.3.3. Координатная сетка и масштабирование¶
Координатная плоскость поддерживает настройку:
координатной сетки (метод Axes.grid());
соотношения сторон (метод Axes.set_aspect());
пределов осей (методы Axes.set_xlim() и Axes.set_ylim());
положения линий осей (поле Axes.spines и метод Spines.set_position()).
-
class
matplotlib.pyplot.
Axes
¶ -
grid
(b=None, which='major', axis='both', **kwargs)¶ Отобразить сетку координатной плоскости.
Некоторые параметры:
- Параметры
b (bool или {"on", "off"}) – отображает сетку, если
b
-True
или"on"
.
-
set_aspect
(aspect, adjustable=None, anchor=None)¶ Установить соотношение сторон (осей) координатной плоскости.
Некоторые параметры:
- Параметры
aspect –
"auto"
(по умолчанию): максимальное заполнение координатной плоскости;"equal"
: соотношение осей OX и OY как 1:1;num
: ось OY растянута вnum
раз больше, чем OX.
-
set_xlim
(left=None, right=None, emit=True, auto=False, **kw)¶ Установить пределы значений
[left; right]
по оси OX.- Результат
кортеж - новые пределы по оси OX.
- Тип результата
-
set_ylim
(bottom=None, top=None, emit=True, auto=False, **kw)¶ Установить пределы значений
[bottom; top]
по оси OY.- Результат
кортеж - новые пределы по оси OY.
- Тип результата
-
spines
¶ Словарь - линии осей координат (класс Spines):
"left"
(левая);"bottom"
(нижняя);"right"
(правая);"top"
(верхняя).
Для изменения позиции конкретной линии оси координат используется метод Spines.set_position().
-
12.1.3.4. Легенда¶
Matplotlib также поддерживает добавление легенды - условного обозначения значений различных рядов данных на диаграмме (метод Axes.legend()).
-
class
matplotlib.pyplot.
Axes
¶ -
legend
(*args, **kwargs)¶ Размещает легенду на координатной плоскости.
Некоторые параметры:
- Параметры
loc –
положение легенды:
"best"
(авто-размещение);"upper right"
(по умолчанию),"upper left"
;"lower left"
;"lower right"
;"right"
;"center left"
;"center right"
;"lower center"
;"upper center"
;"center"
.
-
12.1.3.5. Текст и аннотациии¶
На диаграмму также имеется возможность добавить:
произвольный текст (метод Axes.text());
аннотацию (метод Axes.annotate()).
Текст в matplotlib поддерживает известный научный формат TeX (произносится как «тех»), позволяющий записывать сложные математические выражения.
-
class
matplotlib.pyplot.
Axes
¶ -
text
(x, y, s, fontdict=None, withdash=False, **kwargs)¶ Добавляет текст
s
на координатную плоскость в координаты(x, y)
(левый верхний угол).Возможные ключи
**kwargs
- свойства текстового объекта (класс Text), определяющие отображение текста.
-
annotate
(*args, **kwargs)¶ Добавляет аннотацию
s
на координатную плоскость в координаты(x, y)
.Некоторые параметры:
- Параметры
-
В Листинге 12.1.2 и на Рисунке 12.1.4 приведен пример использования ряда функций для построения диаграммы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | import numpy as np
import matplotlib
import matplotlib.pyplot as plt
if __name__ == "__main__":
x = np.arange(-8, 3, 0.1) # x - массив np.array
y1 = abs(x**2 + 4*x - 5)
y2 = [9] * len(x)
fig, ax = plt.subplots()
fig.canvas.set_window_title("Графики функций")
# Настройки диаграммы и осей
ax.set_title("Графики функций: экстремум")
ax.set_xlabel("Ось абсцисс")
ax.set_ylabel("Ось ординат")
ax.grid(True)
# 2 графика
ax.plot(x, y1, 'r', linewidth=3, label="Парабола")
ax.plot(x, y2, label="Линия")
# Аннотации и текст
ax.annotate(r"Экстремум функции = $\frac{-b}{2a} = \frac{-4}{2} = -2$",
xy=(-2, 9), xytext=(-4.8, 15.5),
arrowprops=dict(facecolor="black", shrink=0.05))
ax.text(-7, 24.5, "На диаграмме 2 графика:\nпарабола и линия экстремума")
# Легенда
ax.legend()
plt.show()
|

Рисунок 12.1.4 - Заголовки, подписи и другие элементы графика в matplotlib¶
12.1.3.6. Несколько диаграмм в изображении¶
В ряде случаев удобно иметь несколько диаграмм в рамках одного изображения. matplotlib позволяет это сделать, используя функцию matplotlib.pyplot.subplots()
, указав параметры разбиения изображения (Листинге 12.1.3, Рисунок 12.1.5).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | import numpy as np
import matplotlib
import matplotlib.pyplot as plt
if __name__ == "__main__":
x = np.arange(-8, 3, 0.1) # x - массив np.array
y1 = abs(x**2 + 4*x - 5)
y2 = [9] * len(x)
fig, (ax1, ax2) = plt.subplots(ncols=2) # 2 диаграммы по горизонтали
fig.canvas.set_window_title("Графики функций")
# 1) 1-й график
# Настройки диаграммы и осей
ax1.set_title("Графики функций: экстремум")
ax1.set_xlabel("Ось абсцисс")
ax1.set_ylabel("Ось ординат")
ax1.grid(True)
# 2 графика
ax1.plot(x, y1, 'r', linewidth=3, label="Парабола")
ax1.plot(x, y2, label="Линия")
# Аннотации и текст
ax1.annotate(r"Экстремум функции = $\frac{-b}{2a} = \frac{-4}{2} = -2$",
xy=(-2, 9), xytext=(-4.8, 15.5),
arrowprops=dict(facecolor="black", shrink=0.05))
ax1.text(-7, 24.5, "На диаграмме 2 графика:\nпарабола и линия экстремума")
# Легенда
ax1.legend()
# 2) 2-й график
# Настройки диаграммы и осей
ax2.set_title("Графики функций: корни уравнения")
# 3 графика
y2 = list(range(-20, 21))
x2 = [-5] * len(y2)
x3 = [1] * len(y2)
ax2.plot(x, y1, linewidth=3, label="Парабола")
ax2.plot(x2, y2, label="Корень 1")
ax2.plot(x3, y2, label="Корень 2")
# Аннотации и текст
ax2.text(-2, 27, "На диаграмме 3 графика:\nпарабола и корни",
horizontalalignment="center")
ax2.annotate("Корень 1 = -5", xy=(-5, -1.5), xytext=(-10, -5),
arrowprops=dict(
facecolor="black", connectionstyle="angle3",
arrowstyle="->"
))
ax2.annotate("Корень 2 = 1", xy=(1, -1.5), xytext=(2, -8),
arrowprops=dict(
facecolor="black", connectionstyle="angle3",
arrowstyle="->"
))
ax2.set_xlim(-10, 10)
ax2.set_ylim(-10, 10)
ax2.spines["left"].set_position("center")
ax2.spines["bottom"].set_position("center")
ax2.spines['top'].set_visible(False)
ax2.spines['right'].set_visible(False)
# Легенда
ax2.legend(loc="best")
plt.show()
|

Рисунок 12.1.5 - Несколько диаграмм в изображении в matplotlib¶
Доступ к любой из координатных плоскостей можно получить сохранив их при вызове функции matplotlib.pyplot.subplots()
или через функцию Figure.get_axes().
12.1.4. Основные типы диаграмм¶
Класс matplotlib.axes.Axes
содержит множество методов для рисования диаграмм различного типа (Таблица 12.1.2).
Тип |
Метод |
Пример |
---|---|---|
График |
||
Круговая диаграмма |
||
Столбчатая (линейчатая) диаграмма |
||
Гистограмма |
Диаграммы можно комбинировать, вызывая последовательно разные методы: например, на одной диаграмме может быть нарисована столбчатая диаграмма и график одновременно.
12.1.4.1. График¶
График (в т.ч. точечная диаграмма) является одним из самых простых способов отображения зависимости в графическом виде и может быть нарисован с использованием метода Axes.plot().
-
class
matplotlib.pyplot.
Axes
¶ -
plot
(*args, **kwargs)¶ Рисует линии и/или точки (маркеры) на координатной плоскости.
- Параметры
args – аргумент переменной длины, содержащий набор точек для осей OX и OY, а также произвольный текста и параметры графика;
kwargs – стиль и свойства линий.
- Результат
список добавленных на координатную плоскость линий;
- Тип результата
Стиль и свойства линии могут быть заданы как через позиционные аргументы
args
, так и ключевые -kwargs
:В случае, когда значения являются датой, удобнее использовать метод Axes.plot_date().
-
12.1.4.1.1. Стили линий¶
Линии (класс Line2D) графика могут иметь различные стили: тип, толщину, цвет, форму и т.д.
-
class
matplotlib.lines.
Line2D
(xdata, ydata, linewidth=None, linestyle=None, color=None, marker=None, markersize=None, markeredgewidth=None, markeredgecolor=None, markerfacecolor=None, markerfacecoloralt='none', fillstyle=None, antialiased=None, dash_capstyle=None, solid_capstyle=None, dash_joinstyle=None, solid_joinstyle=None, pickradius=5, drawstyle=None, markevery=None, **kwargs)¶
Параметр kwargs
при создании графика может содержать соответствующие свойства линии.
Некоторые атрибуты линии:
-
class
matplotlib.lines.
Line2D
¶ -
axes
¶ Координатная плоскость, которой принадлежит линия.
-
color
¶ Цвет линии, который может быть задан:
именем
"green"
;аббревиатурой
"g"
;в шестандцатеричном формате
"#00FF00"
;RGB
(0, 1, 0)
или RGBA(0, 1, 0, 1)
кортежем;оттенком серого в виде строки
"0.8"
.
Если не указывать цвет, matplotlib выберет его самостоятельно.
-
label
¶ Наименование линии (используется, в частности, для легенды).
-
linestyle
¶ Стиль линии:
"solid"
: сплошная;"dashed"
: пунктирная;"dotted"
: точечная;"dashdot"
: точечно-пунктирная;и др.
-
linewidth
¶ Толщина линии (вещественное число).
-
marker
¶ Тип маркера для точки графика (по умолчанию отсутствуют), например:
"."
: точка;"+"
: плюс;"o"
: окружность;"*"
: звезда;и др.
Полный список маркеров указан в документации: matplotlib.markers.
Цвета маркеров определяются атрибутами
markeredgecolor
,markeredgewidth
,markerfacecolor
,markerfacecoloralt
.
-
markersize
¶ Размер маркера.
-
В Листинге 12.1.4 и на Рисунке 12.1.6 приведен пример создания графика с линиями различного стиля.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | import numpy as np
import matplotlib
import matplotlib.pyplot as plt
if __name__ == "__main__":
fig, ax = plt.subplots()
fig.canvas.set_window_title("Графики функций")
# Настройки диаграммы и осей
ax.set_title("Графики функций: различные стили")
ax.grid(True)
ax.set_xlim(-10, 10)
ax.set_ylim(-10, 10)
ax.spines["left"].set_position("center")
ax.spines["bottom"].set_position("center")
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.set_aspect("equal")
# Графики различного стиля
x = np.arange(-10, 10, 0.5) # x - массив np.array
ax.plot(x, abs(2 - abs(x)), label="Желтая сплошная линия",
color="yellow", linewidth=3)
ax.plot(x, -x - 5, label="Фиолетовая пунктирная линия",
color="#D490CC", linewidth=3, linestyle="dashed")
ax.plot(x, x - 8, label="Линия с точками-маркерами *",
marker="*")
ax.plot([-6] * len(x), x, label="Точки-маркеры o",
linestyle="none", marker="o", markersize=3)
# Легенда
ax.legend(loc="best")
plt.show()
|

Рисунок 12.1.6 - Различные стили линий графика¶
12.1.4.2. Круговая диаграмма¶
Круговая диаграмма отображает размер элементов одного ряда данных относительно суммы элементов, а точки данных на круговой диаграмме выводятся как проценты от всего круга.
Круговая диаграмма может быть нарисована с использованием метода Axes.pie().
-
class
matplotlib.lines.
Axes
¶ -
pie
(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False)¶ Рисует круговую диаграмму для значений
x
, где доля круга определяется, какx/sum(x)
.По умолчанию доли (сектора) рисуются против часовой стрелки относительно оси OX.
Некоторые параметры:
- Параметры
x – набор значений (обязательный параметр);
colors – набор значений цветов секторов;
labels – набор подписей для секторов;
autopct – форматная строка или функция для отображения значения доли на секторах круга;
shadow (bool) – рисует тень, если
True
;radius – радиус круга (по умолчанию: 1).
-
В Листинге 12.1.5 и на Рисунке 12.1.6 приведен пример создания круговой диаграммы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | import matplotlib
import matplotlib.pyplot as plt
if __name__ == "__main__":
fig, ax = plt.subplots()
fig.canvas.set_window_title("Фактическое исполнение бюджета Москвы в 2015 году")
# Настройки диаграммы и осей
ax.set_title("Фактическое исполнение бюджета Москвы в 2015 году")
ax.set_xlabel("https://data.mos.ru/opendata/"
"7710152113-struktura-dohodov-byudjeta/row/37352740")
# https://data.mos.ru/opendata/7710152113-struktura-dohodov-byudjeta/row/37352740
data = [
["Налог на прибыль", 484.7],
["Налог на доходы физических лиц", 691.6],
["Прочие налоговые доходы", 221.2],
["Арендные платежи", 59.4],
["Доходы от продажи имущества", 26.7],
["Безвозмездные поступления", 75.5]
]
values = [x[1] for x in data]
labels = [x[0] for x in data]
ax.pie(values, labels=labels, autopct="%.1f%%", radius=1.2)
ax.set_aspect("equal")
plt.show()
|

Рисунок 12.1.7 - Круговая диаграмма¶
12.1.4.3. Столбчатая (линейчатая) диаграмма¶
Столбчатые диаграммы используются для сравнения отдельных элементов. В диаграммах этого типа категории обычно располагаются на вертикальной оси, а величины - на горизонтальной.
Столбчатая диаграмма может быть нарисована с использованием методов:
Axes.bar() (вертикальная);
Axes.barh() (горизонтальная).
-
class
matplotlib.lines.
Axes
¶ -
bar
(left, height, width=0.8, bottom=None, **kwargs)¶ Рисует столбчатую диаграмму (вертикальную).
Некоторые параметры:
- Параметры
left (набор числовых значений) – координата
x
левого края каждого прямоугольника;height (набор числовых значений) – высота каждого прямоугольника;
width (набор числовых значений) – ширина каждого прямоугольника;
bottom (набор числовых значений) – координата
y
нижнего края каждого прямоугольника;color (набор значений) – цвет каждого прямоугольника;
tick_label (строка или набор значений) – подпись по оси OX для каждого прямоугольника.
-
-
class
matplotlib.lines.
Axes
¶ -
barh
(bottom, width, height=0.8, left=None, **kwargs)¶ Рисует столбчатую диаграмму (горизонтальную).
Некоторые параметры:
- Параметры
bottom (набор числовых значений) – координата
y
каждого прямоугольника (центр);width (набор числовых значений) – ширина каждого прямоугольника;
height (набор числовых значений) – высота каждого прямоугольника;
left (набор числовых значений) – координата
x
правого края каждого прямоугольника;color (набор значений) – цвет каждого прямоугольника;
tick_label (строка или набор значений) – подпись по оси OY для каждого прямоугольника.
-
В Листинге 12.1.6 и на Рисунке 12.1.8 приведен пример создания столбчатой диаграммы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | import matplotlib
import matplotlib.pyplot as plt
if __name__ == "__main__":
title = "Валовой внутренний продукт РФ: в ценах 2011г. (2011-2016 гг.)"
fig, (ax1, ax2) = plt.subplots(ncols=2)
fig.canvas.set_window_title(title)
fig.suptitle(title +
"\nhttp://www.gks.ru/free_doc/new_site/vvp/vvp-god/tab2a.xls")
# Настройки диаграммы и осей
ax1.set_xlabel("Год")
ax1.set_ylabel("В ценах 2011 г., млрд.руб.")
ax2.set_xlabel("В ценах 2011 г., млрд.руб.")
ax2.set_ylabel("Год")
# http://www.gks.ru/free_doc/new_site/vvp/vvp-god/tab2a.xls
data = [
[2011, 59698.1],
[2012, 61798.3],
[2013, 62588.9],
[2014, 63038.4],
[2015, 61249.4],
[2016, 61097.5]
]
size = [x[1] for x in data]
nums = [x + 1 for x in range(len(size))]
tick_label = [x[0] for x in data]
ax1.bar(nums, size, tick_label=tick_label, width=0.5, color="#a500ff")
ax2.barh(nums, size, tick_label=tick_label, height=0.7, color="#ffa500")
plt.show()
|

Рисунок 12.1.8 - Столбчатая диаграмма¶
12.1.4.4. Гистограмма¶
Гистограммы графически отображают распределение значений непрерывных переменных, разделяя диапазон значений на заданное количество отрезков по оси OX и отображая частоту значений внутри каждого отрезка по оси OY.
Гистограмма может быть нарисована с использованием метода Axes.hist().
-
class
matplotlib.lines.
Axes
¶ -
matplotlib.pyplot.hist(x, bins=None, range=None, density=None, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, normed=None, *, data=None, **kwargs)[source]
Рисует гистограмму по данным
x
.Некоторые параметры:
- Параметры
x (набор числовых значений (одномерный или двумерный)) – входные данные;
bins (int или набор данных) – количество интервалов разбиения;
align (str) –
выравнивание прямоугольника гистограммы:
"left"
(по левому краю);"mid"
(по центру - по умолчанию);"right"
(по правому краю).
orientation (str) –
ориентация гистограммы:
"horizontal"
(горизонтально);"mid"
(вертикально - по умолчанию).
color – набор значений цветов данных;
label – набор подписей для данных.
- Результат
кортеж:
n: массив длин прямоугольников или список таких массивов (если было передано несколько наборов данных);
bins: массив - границы прямоугольников;
patches: набор вложенных массивов - индивидуальных параметров прямоугольников в случае построения нескольких наборов данных.
-
В Листинге 12.1.7 и на Рисунке 12.1.9 приведен пример создания гистограммы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import matplotlib
import matplotlib.pyplot as plt
if __name__ == "__main__":
title = "Распределение сумм кредитов"
fig, ax = plt.subplots()
fig.canvas.set_window_title(title)
# Настройки диаграммы и осей
ax.set_title(title)
ax.set_xlabel("Сумма")
ax.set_ylabel("Количество")
# Суммы кредитов, взятых в банке
data = [40000, 120000, 90000, 160000, 290000, 250000,
90000, 260000, 170000, 11000, 500000, 250000]
bins_to_be = 3 # Количество интервалов разбиения
n, bins, patches = ax.hist(data, bins=bins_to_be,
color="brown", edgecolor="black")
# Вывод итоговых данных в легенду
res = ""
for i in range(bins_to_be):
res += "Группа №{}, {:.0f} чел., от {:.2f} руб.\n". \
format(i+1, n[i], bins[i])
ax.legend([res.strip()])
plt.show()
|

Рисунок 12.1.9 - Гистограмма¶
12.1.5. Какой тип диаграммы выбрать?¶
Выбор правильного типа диаграммы - залог успешной визуализации данных. На Рисунках 12.1.10 и 12.1.11 приведены краткие и расширенные критерии выбора.
12.1.6. Дополнительные возможности¶
В matplotlib 1.3 появилась возможность применения эффекта рисования от руки, чтобы изображение выглядело в стиле комиксов с сайта xkcd.com, для чего перед отрисовкой необходимо выполнить команду pyplot.xkcd() (Рисункок 12.1.12).

Рисунок 12.1.12 - Изображение в стиле комикса xkcd¶
В целом библиотека matplotlib обладает существенно большими возможностями, чем рассмотренные, поэтому настоятельно рекомендуется ознакомиться с официальной документацией и изучить ее прочие возможности.
- 1
Sebesta, W.S Concepts of Programming languages. 10E; ISBN 978-0133943023.
- 2
Python - официальный сайт. URL: https://www.python.org/.
- 3
Python - FAQ. URL: https://docs.python.org/3/faq/programming.html.
- 4
Саммерфилд М. Программирование на Python 3. Подробное руководство. — М.: Символ-Плюс, 2009. — 608 с.: ISBN: 978-5-93286-161-5.
- 5
Лучано Рамальо. Python. К вершинам мастерства. — М.: ДМК Пресс , 2016. — 768 с.: ISBN: 978-5-97060-384-0, 978-1-491-94600-8.
- 6
График. URL: https://upload.wikimedia.org/wikipedia/commons/8/88/I1_Line_RSG-Diagram.PNG
- 7
Круговая диаграмма. URL: https://upload.wikimedia.org/wikipedia/commons/2/24/I4_Circ_feren_diagram.PNG
- 8
Столбчатая (линейчатая) диаграмма. URL: https://upload.wikimedia.org/wikipedia/commons/8/81/I3_Histogram.PNG
- 9
Гистограмма. URL: https://upload.wikimedia.org/wikipedia/commons/thumb/8/8e/Histogram_example.svg/959px-Histogram_example.svg.png
- 10
Screenshot of matplotlib plots and code. URL: https://upload.wikimedia.org/wikipedia/commons/c/ca/Mpl_screenshot_figures_and_code.png.
- 11
Выбор типа диаграммы. URL: http://www.plam.ru/bislit/govori_na_jazyke_diagramm_posobie_po_vizualnym_kommunikacijam/p3.php.
- 12
Как выбрать диаграмму?! URL: http://www.fdfgroup.ru/?id=279.