Использование библиотеки Matplotlib. Как нарисовать несколько графиков в одном окне

Часто бывает удобно отобразить несколько независимых графиков в одном окне. Для этого предназначена функция subplot() из пакета matplotlib.pyplot.

У этой функции есть несколько вариантов ее использования. В этой статье мы рассмотрим два из них.

Функция subplot() ожидает три параметра:

  • количество строк в графике;
  • количество столбцов в графике;
  • номер ячейки, куда будут выводиться графики, после вызова этой функции. Ячейки нумеруются построчно, начиная с 1.

Проще всего сразу рассмотреть пример. В этом примере для простоты будут выводиться одинаковые графики в разные ячейки. Чтобы было более наглядно, в заголовок каждого графика будет добавлена цифра, обозначающая порядковый номер ячейки.

# -*- coding: utf-8 -*-

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() разбиение главного окна может быть свое, что позволяет сделать, например, следующее расположение графиков (обратите внимание на нумерацию ячеек):

# -*- coding: utf-8 -*-

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). Поэтому предыдущий пример мы можем переписать в следующем виде, при этом внешний вид графика не изменится:

# -*- coding: utf-8 -*-

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 для расположения графиков.

Другие статьи про Matplotlib

Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.
4.5 stars

Рейтинг 4.5/5. Всего 20 голос(а, ов)



 21.02.2011 - 19:54

confused smiley

 21.02.2011 - 19:55

angry smileyfrowning smileyconfused smiley

 12.02.2016 - 11:20

happy smileywinking smileycool smileyrolling eyes smileyshrieking smileyshrieking smileyangry smileyfrowning smileyconfused smiley

Roister 25.04.2016 - 20:55

Спасибо.happy smiley

 25.09.2016 - 07:50

А можно ли у всех этих графиков сделать общую подпись?


Подписаться на комментарии
Автор:
Тема:
 Ваш комментарий
 
 
Введите код 226