Использование библиотеки Matplotlib. Как нарисовать несколько графиков в одном окне
Часто бывает удобно отобразить несколько независимых графиков в одном окне. Для этого предназначена функция subplot() из пакета matplotlib.pyplot.
У этой функции есть несколько вариантов ее использования. В этой статье мы рассмотрим два из них.
Функция subplot() ожидает три параметра:
- количество строк в графике;
- количество столбцов в графике;
- номер ячейки, куда будут выводиться графики, после вызова этой функции. Ячейки нумеруются построчно, начиная с 1.
Проще всего сразу рассмотреть пример. В этом примере для простоты будут выводиться одинаковые графики в разные ячейки. Чтобы было более наглядно, в заголовок каждого графика будет добавлена цифра, обозначающая порядковый номер ячейки.
import matplotlib.pyplot as plt
import numpy as np
if __name__ == '__main__':
# Интервал изменения переменной по оси X
xmin = -20.0
xmax = 20.0
count = 200
# Создадим список координат по оиси X на отрезке [xmin; xmax]
x = np.linspace(xmin, xmax, count)
# Вычислим значение функции в заданных точках
y = np.sinc(x / np.pi)
plt.figure(figsize=(8, 8))
# !!! Две строки, три столбца.
# !!! Текущая ячейка - 1
plt.subplot(2, 3, 1)
plt.plot(x, y)
plt.title("1")
# !!! Текущая ячейка - 2
plt.subplot(2, 3, 2)
plt.plot(x, y)
plt.title("2")
# !!! Текущая ячейка - 3
plt.subplot(2, 3, 3)
plt.plot(x, y)
plt.title("3")
# !!! Текущая ячейка - 4
plt.subplot(2, 3, 4)
plt.plot(x, y)
plt.title("4")
# !!! Текущая ячейка - 5
plt.subplot(2, 3, 5)
plt.plot(x, y)
plt.title("5")
# !!! Текущая ячейка - 6
plt.subplot(2, 3, 6)
plt.plot(x, y)
plt.title("6")
# Покажем окно с нарисованным графиком
plt.show()
Все эти ячейки чисто условные, поэтому для каждого вызова subplot() разбиение главного окна может быть свое, что позволяет сделать, например, следующее расположение графиков (обратите внимание на нумерацию ячеек):
import matplotlib.pyplot as plt
import numpy as np
if __name__ == '__main__':
# Интервал изменения переменной по оси X
xmin = -20.0
xmax = 20.0
count = 200
# Создадим список координат по оиси X на отрезке [xmin; xmax]
x = np.linspace(xmin, xmax, count)
# Вычислим значение функции в заданных точках
y = np.sinc(x / np.pi)
plt.figure(figsize=(8, 8))
# !!! Две строки, три столбца.
# !!! Текущая ячейка - 1
plt.subplot(2, 3, 1)
plt.plot(x, y)
plt.title("1")
# !!! Две строки, три столбца.
# !!! Текущая ячейка - 2
plt.subplot(2, 3, 2)
plt.plot(x, y)
plt.title("2")
# !!! Две строки, три столбца.
# !!! Текущая ячейка - 4
plt.subplot(2, 3, 4)
plt.plot(x, y)
plt.title("4")
# !!! Две строки, три столбца.
# !!! Текущая ячейка - 5
plt.subplot(2, 3, 5)
plt.plot(x, y)
plt.title("5")
# !!! Одна строка, три столбца.
# !!! Текущая ячейка - 3
plt.subplot(1, 3, 3)
plt.plot(x, y)
plt.title("3")
# Покажем окно с нарисованным графиком
plt.show()
У функции есть еще несколько необычный способ задания разбиения окна. В случае, если количество графиков не превышает 9, вместо перечисления трех чисел мы можем писать одно трехзначное целое число. То есть, вместо plt.subplot(1, 3, 3) мы можем написать plt.subplot(133). Поэтому предыдущий пример мы можем переписать в следующем виде, при этом внешний вид графика не изменится:
import matplotlib.pyplot as plt
import numpy as np
if __name__ == '__main__':
# Интервал изменения переменной по оси X
xmin = -20.0
xmax = 20.0
count = 200
# Создадим список координат по оиси X на отрезке [xmin; xmax]
x = np.linspace(xmin, xmax, count)
# Вычислим значение функции в заданных точках
y = np.sinc(x / np.pi)
plt.figure(figsize=(8, 8))
# !!! Две строки, три столбца.
# !!! Текущая ячейка - 1
plt.subplot(231)
plt.plot(x, y)
plt.title("1")
# !!! Две строки, три столбца.
# !!! Текущая ячейка - 2
plt.subplot(232)
plt.plot(x, y)
plt.title("2")
# !!! Две строки, три столбца.
# !!! Текущая ячейка - 4
plt.subplot(234)
plt.plot(x, y)
plt.title("4")
# !!! Две строки, три столбца.
# !!! Текущая ячейка - 5
plt.subplot(235)
plt.plot(x, y)
plt.title("5")
# !!! Одна строка, три столбца.
# !!! Текущая ячейка - 3
plt.subplot(133)
plt.plot(x, y)
plt.title("3")
# Покажем окно с нарисованным графиком
plt.show()
У функции subplot() есть еще другие способы использования, которые описаны в статье Использование класса GridSpec для расположения графиков.
Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.