Как создать несколько графиков Matplotlib на одном рисунке
Вы можете использовать следующий синтаксис для создания нескольких графиков Matplotlib на одном рисунке:
import matplotlib.pyplot as plt #define grid of plots fig, axs = plt.subplots(nrows= 2 , ncols= 1 ) #add data to plots axs[0].plot(variable1, variable2) axs[1].plot(variable3, variable4)
В следующих примерах показано, как использовать эту функцию на практике.
Пример 1: сложите графики вертикально
В следующем коде показано, как создать три графика Matplotlib, расположенные вертикально:
#create some data var1 = [1, 2, 3, 4, 5, 6] var2 = [7, 13, 16, 18, 25, 19] var3 = [29, 25, 20, 25, 20, 18] #define grid of plots fig, axs = plt.subplots(nrows= 3 , ncols= 1 ) #add title fig. suptitle('Plots Stacked Vertically') #add data to plots axs[0].plot(var1, var2) axs[1].plot(var1, var3) axs[2].plot(var2, var3)

Пример 2: сложить графики по горизонтали
В следующем коде показано, как создать три графика Matplotlib, расположенные горизонтально:
#create some data var1 = [1, 2, 3, 4, 5, 6] var2 = [7, 13, 16, 18, 25, 19] var3 = [29, 25, 20, 25, 20, 18] #define grid of plots fig, axs = plt.subplots(nrows= 1 , ncols= 3 ) #add title fig. suptitle('Plots Stacked Horizontally') #add data to plots axs[0].plot(var1, var2) axs[1].plot(var1, var3) axs[2].plot(var2, var3)

Пример 3: создание сетки графиков
Следующий код показывает, как создать сетку графиков Matplotlib:
#create some data var1 = [1, 2, 3, 4, 5, 6] var2 = [7, 13, 16, 18, 25, 19] var3 = [29, 25, 20, 25, 20, 18] var4 = [4, 4, 6, 4, 7, 11] #define grid of plots fig, axs = plt.subplots(nrows= 2 , ncols= 2 ) #add title fig. suptitle('Grid of Plots') #add data to plots axs[0, 0].plot(var1, var2) axs[0, 1].plot(var1, var3) axs[1, 0].plot(var1, var4) axs[1, 1].plot(var3, var1)

Пример 4: Совместное использование осей между участками
Вы можете использовать аргументы sharex и sharey , чтобы убедиться, что несколько графиков используют одну и ту же ось X:
#create some data var1 = [1, 2, 3, 4, 5, 6] var2 = [7, 13, 16, 18, 25, 19] var3 = [29, 25, 20, 25, 20, 18] var4 = [4, 4, 6, 4, 7, 11] #define grid of plots fig, axs = plt.subplots(nrows= 2 , ncols= 2 , sharex= True , sharey= True ) #add title fig. suptitle('Grid of Plots with Same Axes') #add data to plots axs[0, 0].plot(var1, var2) axs[0, 1].plot(var1, var3) axs[1, 0].plot(var1, var4) axs[1, 1].plot(var3, var1)
Как построить два графика на одном поле в python
На этом шаге мы рассмотрим особенности размещения графиков на одном поле .
Построим несколько графиков на одном поле, для этого добавим квадратичную зависимость:
import matplotlib.pyplot as plt import numpy as np # Линейная зависимость x = np.linspace(0, 10, 50) y1 = x # Квадратичная зависимость y2 = [i ** 2 for i in x] # Построение графика plt.title('Зависимости: y1 = x, y2 = х^2') # заголовок plt.xlabel('x') # ось абсцисс plt.ylabel('y1, y2') # ось ординат plt.grid() # включение отображения сетки plt.plot(x, y1, x, y2) # построение графика plt.show() # показать результат
Архив с файлом можно взять здесь.
Рис.1. Несколько графиков на одном поле
В приведённом примере в функцию plot() последовательно передаются два массива для построения первого графика и два для построения второго, при этом, как вы можете заметить, для обоих графиков массив значений независимой переменной х один и то же.
На следующем шаге мы рассмотрим представление графиков на разных полях .
Построение графиков. Пакет MatPlotLib¶
Работа с графиками и простыми 2D и 3D изображениями реализована в пакете Matplotlib.
Использование пакета очень простое: выбираем нужный тип изображения, загружаем пример, дорабатываем, и получаем результат. Например:
для работы Matplotlib должен быть установлен модуль работы с массивами NumPy .
Прямой способ использования функциональности Matplotlib заключается в импортировании модуля PyPlot : import matplotlib.pyplot as py. Альтернативно можно использовать другое пространство имен PyLab : import pylab as py. Во втором способе также становятся доступны базовые функции пакета работы с массивами NumPy
import pylab as py x = range(10) y = [(float(i)/10.0*3.1415)**2 for i in range(10)] py.errorbar(x, y, yerr=range(10), capsize=3)
Команды построения графиков¶
- один график, толщина линии – 2, линия пунктирная
plot(x, y, '-', lw=2)
plot(x, y, '-', lw=2, x1, y1, 'o', lw=1, x2, y2, '-', ‘r’)
errorbar(x,y,yerr=1.,capsize=3)
scatter(x, y, c=colour, s=size, alpha=0.5, edgecolors='none')
py.hist(x, 50, normed=1, histtype='bar', rwidth=0.8)
im = py.imshow(Z, cmap=py.cm.jet)
py.figure(1) # первое окно py.subplot(211) py.plot([1,2,3]) # первый график py.subplot(212) # второй график py.plot([4,5,6]) py.figure(2) # второе окно py.plot([4,5,6])
при построении графиков x и y должны быть одинаковой размерности!
Задание параметров графиков¶
- При вызове (см. таблицу выше)
- Записать имя объекта – графика и изменять его параметры:
plot=plot(x, y, '-', lw=1) setp(plot, color='r', linewidth=2.0)
Задание легенды¶
- Cразу при построении графика
plot=plot(x, y, '-', lw=1, label=’graph 1’) legend() #показать легенду
- Отдельной командой
p1, = plot([1,2,3]) p2 = plot([3,2,1]) legend([p1,p2], ["line 1","line 2"], loc=2) # присваивает и выводит легенду
| Положение | Параметр loc |
|---|---|
| верхнее правое | 1 |
| верхнее левое | 2 |
| нижнее левое | 3 |
| нижнее правое | 4 |
| правое | 5 |
| левое центральное | 6 |
| правое центральное | 7 |
| внизу поцентру | 8 |
| вверху по центру | 9 |
| по центру | 10 |
Параметры поля вывода графиков¶
- axis([0, 6, 0, 20]) – пределы графика по осям
- xlabel(„time (s)“) – подпись оси x
- ylabel(„voltage (mV)“) – подпись оси у
- title(„About as simple as it gets, folks“) – название графика
- grid(True) – показать сетку
Команды показа графика¶
ion() + draw() – показ графика в интерактивном режиме. (программа выполняется дальше)
show() – показ графика. Пока окно графика не закрыто программа дальше не выполняется.
Оглавление
- Построение графиков. Пакет MatPlotLib
- Команды построения графиков
- Задание параметров графиков
- Задание легенды
- Параметры поля вывода графиков
- Команды показа графика
Matplotlib. Урок 2. Работа с инструментом pyplot

Практически все задачи, связанные с построением графиков, можно решить, используя возможности, которые предоставляет модуль pyplot . В рамках данного урока мы рассмотрим базовые возможности модуля для построения графиков.
- Основы работы с pyplot
- Построение графиков
- Текстовые надписи на графике
- Наименование осей
- Заголовок графика
- Текстовое примечание
- Легенда
- Стиль линии графика
- Цвет линии
- Тип графика
- Работа с функцией subplot()
- Работа с функцией subplots()
Для того, чтобы запустить любой из примеров, продемонстрированных в первом уроке (“ Matplolib . Урок 1. Быстрый старт), вам предварительно нужно было импортировать pyplot из библиотеки Matplolib . В настоящее время среди пользователей этого инструмента принято импорт производить следующим образом:
import matplotlib.pyplot as plt
Создатели Matplolib постарались сделать его похожим в использовании на MATLAB , так что если вы знакомы с последним, то разобраться с библиотекой будет проще.
Основы работы с pyplot
Построение графиков
Основным элементом изображения, которое строит pyplot является Фигура (Figure), на нее накладываются один или более графиков, осей, надписей и т.п. Для построения графика используется команда plot() . В самом минимальном варианте можно ее использовать без параметров:
import matplotlib.pyplot as plt %matplotlib inline plt.plot()
В результате будет выведено пустое поле:

Далее команду импорта и magic -команду для Jupyter (первая и вторая строки приведенной выше программы) мы использовать не будем.
Если в качестве параметра функции plot() передать список, то значения из этого списка будут отложены по оси ординат (ось y ), а по оси абсцисс (ось x ) будут отложены индексы элементов массива:
plt.plot([1, 7, 3, 5, 11, 1])

Для того, чтобы задать значения по осям x и y необходимо в plot() передать два списка:
plt.plot([1, 5, 10, 15, 20], [1, 7, 3, 5, 11])

Текстовые надписи на графике
Наиболее часто используемые текстовые надписи на графике это:
- наименование осей;
- наименование самого графика;
- текстовое примечание на поле с графиком;
- легенда.
Рассмотрим кратко данные элементы, более подробный рассказ о них будет в одном из ближайших уроков.
Наименование осей
Для задания подписи оси x используется функция xlabel() , оси y – ylabel(). Разберемся с аргументами данных функций. Здесь и далее аргументы будем описывать следующим образом:
Для функций xlabel()/ylabel() основными являются следующие аргументы:
- xlabel (или ylabel):str
- Текст подписи.
- Расстояние между областью графика, включающую оси, и меткой.
Функции xlabel()/ylabel() принимают в качестве аргументов параметры конструктора класса matplotlib.text.Text , некоторые из них нам могут пригодиться:
- fontsize или size: число либо значение из списка: ‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’, ‘x-large’, ‘xx-large’>.
- Размер шрифта.
- Стиль шрифта.
- Толщина шрифта.
- Цвет шрифта.
plt.xlabel('Day', fontsize=15, color='blue')Аргументов у этих функций довольно много и они позволяют достаточно тонко настроить внешний вид надписей. В рамках этого урока мы только начинаем знакомиться с инструментом pyplot поэтому не будем приводить весь список.
Заголовок графика
Для задания заголовка графика используется функция title() :
plt.title('Chart price', fontsize=17)Из параметров отметим следующие:
- label : str
- Текст заголовка.
- Выравнивание заголовка.
Для функции title() также доступны параметры конструктора класса matplotlib.text.Text , часть из них представлена в описании аргументов функций xlabel() / ylabel().
Текстовое примечание
За размещение текста на поле графика отвечает функция text() , которой вначале передаются координаты позиции надписи, после этого – текст самой надписи.
plt.text(1, 1, 'type: Steel')
Легенда
Легенда будет размещена на графике, если вызвать функцию legend() , в рамках данного урока мы не будем рассматривать аргументы этой функции.
Разместим на уже знакомом нам графике необходимый набор подписей.
x = [1, 5, 10, 15, 20] y = [1, 7, 3, 5, 11] plt.plot(x, y, label='steel price') plt.title('Chart price', fontsize=15) plt.xlabel('Day', fontsize=12, color='blue') plt.ylabel('Price', fontsize=12, color='blue') plt.legend() plt.grid(True) plt.text(15, 4, 'grow up!')
К перечисленным опциям мы добавили сетку, которая включается с помощью функции grid(True) .
Работа с линейным графиком
В этом параграфе мы рассмотрим основные параметры и способы их задания для изменения внешнего вида линейного графика. Matplotlib предоставляет огромное количество инструментов для построения различных видов графиков. Так как наиболее часто встречающийся вид графика – это линейный, ему и уделим внимание. Необходимо помнить, что настройка графиков других видов, будет осуществляться сходным образом.
Параметры, которые отвечают за отображение графика можно задать непосредственно в самой функции plot() :
plt.plot(x, y, color='red')
Либо воспользоваться функцией setp() , через которую можно модифицировать нужные параметры:
plt.setp( color='red', linewidth=1)
Стиль линии графика
Стиль линии графика задается через параметр linestyle , который может принимать значения из приведенной ниже таблицы.
Значение параметра Описание ‘-‘ или ‘solid’ Непрерывная линия ‘–‘ или ‘dashed’ Штриховая линия ‘-.’ или ‘dashdot’ Штрихпунктирная линия ‘:’ или ‘dotted’ Пунктирная линия ‘None’ или ‘ ‘ или ” Не отображать линию Стиль линии можно передать сразу после указания списков с координатами без указания, что это параметр linewidth .
x = [1, 5, 10, 15, 20] y = [1, 7, 3, 5, 11] plt.plot(x, y, '--')

Либо можно воспользоваться функцией setp() :
x = [1, 5, 10, 15, 20] y = [1, 7, 3, 5, 11] line = plt.plot(x, y) plt.setp(line, linestyle='--')
Результат будет тот же, что на рисунке выше.
Для того, чтобы вывести несколько графиков на одном поле необходимо передать соответствующие наборы значений в функцию plot() . Построим несколько наборов данных и выведем их с использованием различных стилей линии:
x = [1, 5, 10, 15, 20] y1 = [1, 7, 3, 5, 11] y2 = [i*1.2 + 1 for i in y1] y3 = [i*1.2 + 1 for i in y2] y4 = [i*1.2 + 1 for i in y3] plt.plot(x, y1, '-', x, y2, '--', x, y3, '-.', x, y4, ':')

Тот же результат можно получить, вызвав plot() для построения каждого графика по отдельности. Если вы хотите представить каждый график отдельно на своем поле, то используйте для этого subplot() (см. Размещение графиков на разных полях)
plt.plot(x, y1, '-') plt.plot(x, y2, '--') plt.plot(x, y3, '-.') plt.plot(x, y4, ':')
Цвет линии
Задание цвета линии графика производится через параметр color (или c , если использовать сокращенный вариант). Значение может быть представлено в одном из следующих форматов:
- RGB или RGBA кортеж значений с плавающей точкой в диапазоне [0, 1] (пример: (0.1, 0.2, 0.3)
- RGB или RGBA значение в hex формате (пример: ‘#0a0a0a’)
- строковое представление числа с плавающей точкой в диапазоне [0, 1] (определяет цвет в шкале серого) (пример: ‘0.7’)
- символ из набора < ‘b’, ‘g’, ‘r’, ‘c’, ‘m’, ‘y’, ‘k’, ‘w’ >
- имя цвета из палитры X11 / CSS4
- цвет из палитры xkcd( https://xkcd.com/color/rgb/ ), должен начинаться с префикса ‘xkcd :’
- цвет из набора Tableau Color (палитра T10 ), должен начинаться с префикса ‘tab :’
Если цвет задается с помощью символа из набора < ‘b’, ‘g’, ‘r’, ‘c’, ‘m’, ‘y’, ‘k’, ‘w’ >, то он может быть совмещен со стилем линии в рамках параметра fmt функции plot() .
Например штриховая красная линия будет задаваться так: ‘–r’, а штрих пунктирная зеленая так ‘-.g’
x = [1, 5, 10, 15, 20] y = [1, 7, 3, 5, 11] plt.plot(x, y, '--r')

Тип графика
До этого момента мы работали только с линейными графиками, функция plot() позволяет задать тип графика: линейный либо точечный, при этом для точечного графика можно указать соответствующий маркер. Приведем пару примеров:
plt.plot(x, y, 'ro')

plt.plot(x, y, 'bx')

Размер маркера можно менять, об этом более подробно будет рассмотрено в уроке, посвященном точечным графикам.
Размещение графиков на разных полях
Существуют три основных подхода к размещению нескольких графиков на разных полях:
- использование функции subplot() для указания места размещения поля с графиком;
- использование функции subplots() для предварительного задания сетки, в которую будут укладываться поля;
- использование GridSpec , для более гибкого задания геометрии размещения полей с графиками в сетке.
В этом уроке будут рассмотрены первые два подхода.
Работа с функцией subplot()
Самый простой способ представить графики в отдельных полях – это использовать функцию supplot() для задания их мест размещения. До этого момента мы не работали с Фигурой ( Figure ) напрямую, значения ее параметров, задаваемые по умолчанию, нас устраивали. Для решения текущей задачи придется один из параметров – размер подложки, задать вручную. За это отвечает аргумент figsize функции figure() , которому присваивается кортеж из двух float элементов, определяющих высоту и ширину подложки.
После задания размера, указывается местоположение, куда будет установлено поле с графиком с помощью функции subplot(). Чаще всего используют следующие варианты вызова subplot:
subplot(nrows, ncols, index)
- nrows: int
- Количество строк.
- Количество столбцов.
- Местоположение элемента.
- pos:int
- Позиция, в виде трехзначного числа, содержащего информацию о количестве строк, столбцов и индексе, например 212, означает подготовить разметку с двумя строками и одним столбцов, элемент вывести в первую позицию второй строки. Этот вариант можно использовать, если количество строк и столбцов сетки не более 10, в ином случае лучше обратиться к первому варианту.
Рассмотрим на примере работу с данными функциями:
# Исходный набор данных x = [1, 5, 10, 15, 20] y1 = [1, 7, 3, 5, 11] y2 = [i*1.2 + 1 for i in y1] y3 = [i*1.2 + 1 for i in y2] y4 = [i*1.2 + 1 for i in y3] # Настройка размеров подложки plt.figure(figsize=(12, 7)) # Вывод графиков plt.subplot(2, 2, 1) plt.plot(x, y1, '-') plt.subplot(2, 2, 2) plt.plot(x, y2, '--') plt.subplot(2, 2, 3) plt.plot(x, y3, '-.') plt.subplot(2, 2, 4) plt.plot(x, y4, ':')

Второй вариант использования subplot():
# Вывод графиков plt.subplot(221) plt.plot(x, y1, '-') plt.subplot(222) plt.plot(x, y2, '--') plt.subplot(223) plt.plot(x, y3, '-.') plt.subplot(224) plt.plot(x, y4, ':')
Работа с функцией subplots()
Одно из неудобств использования последовательного вызова функций subplot() заключается в том, что каждый раз приходится указывать количество строк и столбцов сетки. Для того, чтобы этого избежать, можно воспользоваться функцией subplots(), из всех ее параметров, нас пока интересуют только первые два, через них передается количество строк и столбцов сетки. Функция subplots() возвращает два объекта, первый – это Figure , подложка, на которой будут размещены поля с графиками, второй – объект или массив объектов Axes , через которые можно получить полных доступ к настройке внешнего вида отображаемых элементов.
Решим задачу вывода четырех графиков с помощью функции subplots() :
fig, axs = plt.subplots(2, 2, figsize=(12, 7)) axs[0, 0].plot(x, y1, '-') axs[0, 1].plot(x, y2, '--') axs[1, 0].plot(x, y3, '-.') axs[1, 1].plot(x, y4, ':')
Результат будет аналогичный тому, что приведен в разделе “Работа с функцией subplot() ”.
P.S.
Вводные уроки по “Линейной алгебре на Python” вы можете найти соответствующей странице нашего сайта . Все уроки по этой теме собраны в книге “Линейная алгебра на Python”.
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. Для начала вы можете познакомиться с вводными уроками. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.
Matplotlib. Урок 2. Работа с инструментом pyplot : 4 комментария
- Дарья 06.06.2020 Невероятная статья, спасибо огромнейшее.
- dot 19.06.2022 В plt.setp первым аргументом должно идти название объекта-графика, настройки которого мы меняем
