Использование библиотеки Matplotlib. Более гибкий способ расположения графиков с помощью subplot2grid

До сих пор для того, чтобы в одном окне расположить несколько графиков был только один способ - воспользоваться функцией subplot, которой в большинстве случаев вполне хватает. Но эта функция обладает одним недостатком - при ее использовании график может занимать только одну ячейку некой виртуальной таблицы. Да, для каждого графика можно задавать свою таблицу расположения (разное количество строк и столбцов), благодаря чему может казаться, что график занимает несколько ячеек, но все-равно такой подход довольно ограничен.

В Matplotlib есть более гибкий способ расположения графиков с помощью функции subplot2grid(), которая позволяет занимать графику несколько ячеек таблицы. Например, subplot2grid(), в отличие от subplot(), позволяет создать вот такое расположение осей для графиков:

В данном примере намеренно не приводится вывод самого графика, чтобы сосредоточить внимание на использовании функции subplot2grid().

Данная функция принимает следующие параметры:

  • shape - кортеж из двух целых чисел. Задает виртуальную сетку таблицы. Этот параметр аналогичен первым двум параметрам функции subplot(). Это обязательный параметр функции subplot2grid().
  • loc - кортеж из двух целых чисел. Задает координаты графика в сетке виртуальной таблицы, который будет выбран после вызова функции subplot2grid(). В отличие от функции subplot(), здесь координаты задаются набором двух чисел - номером строки и номером столбца (нумерация начинается с 0). Это обязательный параметр функции subplot2grid().
  • rowspan - количество строк, которые будет занимать график в сетке виртуальной таблицы. Если этот параметр не задать, то график будет занимать одну строку.
  • colspan - количество столбцов, которые будет занимать график в сетке виртуальной таблицы. Если этот параметр не задать, то график будет занимать один столбец.

Главное преимущество функции subplot2grid() над subplot() - это как раз последние два параметра. Функция subplot2grid() может принимать еще другие параметры, описанные в документации, но в данной статье они не рассматриваются.

Следующий показан код, который создает окно, показанное выше. Чтобы отобразить названия графиков в центре осей, использовалась функция text(), которая подробно разбиралась в статье Как выводить текст и настраивать его внешний вид. В комментариях кода еще раз более подробно описаны используемые параметры функции subplot2grid().

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

import matplotlib.pyplot as plt


if __name__ == '__main__':
    plt.figure(figsize=(8, 8))

    # Таблица графиков будет иметь три строки и три столбца (3, 3)

    # Вывод будет осуществляться в ячейку с координатами (0, 0),
    # то есть 0-ая строка и 0-ой столбец
    # Оси для графика будут занимать две ячейки по горизонтали (colspan=2)
    # и две ячейки по вертикали (rowspan=2)
    plt.subplot2grid((3, 3), (0, 0), colspan=2, rowspan=2)
    plt.text(0.5, 0.5, 'Graph1', ha='center')

    # Вывод будет осуществляться в ячейку с координатами (0, 2),
    # то есть 0-ая строка и 2-ой столбец (нумерация начинается с нуля)
    # Оси для графика будут занимать две ячейки по вертикали (rowspan=2)
    plt.subplot2grid((3, 3), (0, 2), rowspan=2)
    plt.text(0.5, 0.5, 'Graph2', ha='center')

    # Вывод будет осуществляться в ячейку с координатами (2, 0),
    # то есть 2-ая строка и 0-ой столбец
    # Оси для графика будут занимать одну ячейку по вертикали и горизонтали
    # Аналог этого вызова - plt.subplot(3, 3, 7)
    plt.subplot2grid((3, 3), (2, 0))
    plt.text(0.5, 0.5, 'Graph3', ha='center')

    # Вывод будет осуществляться в ячейку с координатами (2, 1),
    # то есть 2-ая строка и 1-ый столбец
    # Оси для графика будут занимать две ячейки по горизонтали (colspan=2)
    plt.subplot2grid((3, 3), (2, 1), colspan=2)
    plt.text(0.5, 0.5, 'Graph4', ha='center')

    plt.show()

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

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

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




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