Рубрики
Без рубрики

Matplotlib subplot – полезное иллюстрированное руководство

Все, что вам нужно знать, чтобы освоить функцию Subplot MATPLOTLIB [+ бонусное видео]

Автор оригинала: Adam Murphy.

Слишком много вещей, происходящих в одном сюжете? Нет проблем – используйте несколько подломов!

Этот глубокий учебник показывает вам все, что вам нужно знать, чтобы начать работу с MatPlotlib subplot () функция.

Если вы хотите, просто нажмите «Играть» и посмотрите на видео об объяснении. Затем я направляю вас через учебное пособие:

Чтобы создать SULTLOT MATPLOTLIB с любым количеством строк и столбцов, используйте plt.subplot () функция.

Требуется 3 аргумента, все они являются целыми числами и позиционными только точкой, то есть. Вы не можете использовать ключевые слова для их уточнения.

plt.subplot(nrows, ncols, index)
  • Золоты – количество рядов
  • ncols – количество столбцов
  • индексSubplot Вы хотите выбрать (начиная с 1 в левом верхнем углу)

Итак, plt.subplot (3, 1, 1) имеет 3 ряда, 1 столбец (сетка 3 х 1) и выбирает Subplot с индексом 1.

После plt.subplot () , код вашего сюжета как обычно, используя отказ Функции, которые вы знаете и любите. Затем выберите следующий Subplot, увеличивая индекс на 1 – plt.subplot (3, 1, 2) Выбирает второй Subplot в сетке 3 х 1. Как только все Подломы были построены, позвоните plt.tight_layout () Обеспечить никакие части участков перекрытия. Наконец, позвоните PLT.Show () отображать свой сюжет.

# Import necessary modules and (optionally) set Seaborn style
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np

# Generate data to plot
linear = [x for x in range(5)]
square = [x**2 for x in range(5)]
cube = [x**3 for x in range(5)]

# 3x1 grid, first subplot
plt.subplot(3, 1, 1)
plt.plot(linear)

# 3x1 grid, second subplot
plt.subplot(3, 1, 2)
plt.plot(square)

# 3x1 grid, third subplot
plt.subplot(3, 1, 3)
plt.plot(cube)

plt.tight_layout()
plt.show()

Пример субплота Matplotlib

Аргументы для plt.subplot () Интуитивно понятные:

plt.subplot(nrows, ncols, index)

Первые два – Nrows и Ncols – подпитываются для количества строк и количества столбцов соответственно.

Если вы хотите 2 × 2 сетку, установить и. Для сетки 3 × 1 это и.

Индекс – это Subplot, который вы хотите выбрать. Код, который вы пишете сразу после того, как он нарисован на этом Subplot. В отличие от всего остального в вселенной Python, индексация начинается с 1, а не 0. Он продолжается от левой вправо так же, как вы читаете.

Итак, для 2 х 2 сетки индексы

Для 3 х 1 сетки, они

Аргументы для plt.subplot () Только позиционные. Вы не можете пройти их в качестве аргументов ключевых слов.

>>> plt.subplot(nrows=3, ncols=1, index=1)
AttributeError: 'AxesSubplot' object has no property 'nrows'

Тем не менее, запятая между значениями является необязательной, если каждое значение является целым числом менее 10.

Таким образом, следующие эквивалентны – они оба выбирают индекс 1 из сетки 3 × 1.

plt.subplot(3, 1, 1)
plt.subplot(311)

Я буду чередовать, включая и исключая запятые, чтобы помочь вашему обучению.

Давайте посмотрим на макет Subplot по умолчанию и общий контур для вашего кода.

plt.subplot(3, 1, 1)
# First subplot here

plt.subplot(3, 1, 2)
# Second subplot here

plt.subplot(3, 1, 3)
# Third subplot here

plt.show()

Это выглядит нормально, но этикетки оси X трудно прочитать на верхних 2 подломов.

У вас есть несколько способов решить эту проблему.

Во-первых, вы можете вручную отрегулировать XTicks с matplotlib xticks Функция – PLT.xticks () – и либо:

  1. сделать их прозрачными, установив alpha = 0 , или
  2. переместить их и уменьшить размер шрифта с позиция и Размер аргументы
# Make xticks of top 2 subplots transparent
plt.subplot(3, 1, 1)
plt.xticks(alpha=0)

plt.subplot(3, 1, 2)
plt.xticks(alpha=0)

# Plot nothing on final subplot
plt.subplot(3, 1, 3)

plt.suptitle('Transparent Xticks - plt.xticks(alpha=0)')
plt.show()
# Move and decrease size of xticks on all subplots
plt.subplot(3, 1, 1)
plt.xticks(position=(0, 0.1), size=10)

plt.subplot(3, 1, 2)
plt.xticks(position=(0, 0.1), size=10)

plt.subplot(3, 1, 3)
plt.xticks(position=(0, 0.1), size=10)

plt.suptitle('Smaller Xticks In A Better Position')
plt.show()

Оба эти методы работают, но они справляются. Кроме того, вы не можете автоматизировать их, что раздражает для программистов США.

У вас есть эта проблема Ticks, когда вы создаете подломы. К счастью, Matplotlib Tight_layout Функция была создана для решения этого.

Matplotlib tight_layout.

Призывая plt.tight_layout () MATPLOTLIB автоматически регулирует следующие части графика, чтобы убедиться, что они не перекрываются:

  1. Этикетки оси набор с plt.xlabel () и plt.ylabel () ,
  2. Метки галочки набор PLT.xticks () и plt.yticks () ,
  3. Набор заголовков с PLT.TITLE () и plt.suptitle ()

Обратите внимание, что эта функция является экспериментальной. Это не идеально, но часто делает действительно хорошую работу. Кроме того, обратите внимание, что он не работает слишком хорошо с легендами или Colorbars – вы увидите, как работать с ними позже.

Давайте посмотрим самый простой пример без каких-либо меток или названий.

plt.subplot(311)
plt.subplot(312)
plt.subplot(313)
plt.tight_layout()
plt.show()

Сейчас существует много места между участками. Вы можете настроить это с Pad ключевое слово. Он принимает поплавок в диапазоне [0,0, 1,0] и является частью размера шрифта.

plt.subplot(311)
plt.subplot(312)
plt.subplot(313)
plt.tight_layout(pad=0.1)
plt.show()

Теперь между сюжетами меньше места между участками, но все все еще читаемо. Я использую plt.tight_layout () В каждом сюжете (без колобаров или легендов) и я рекомендую вам также сделать. Это простой способ сделать ваши участки великолепны.

Проверьте Документы больше информации и аргументов, которые Tight_layout в matplotlib принимает.

Теперь давайте посмотрим, как добавить больше информации в наши подложки в Matplotlib.

Matplotlib Subplot Название

Вы можете добавить заголовок на каждый Subplot с PLT.TITLE () функция.

plt.subplot(2, 2, 1)
plt.title('First Title')

plt.subplot(2, 2, 2)
plt.title('Second Title')

plt.subplot(2, 2, 3)
plt.title('Third Title')

plt.subplot(2, 2, 4)
plt.title('Fourth Title')

plt.tight_layout()
plt.show()

Matplotlib subplot общий заголовок

Добавьте общий заголовок в Subplot в MatPlotlib с plt.suptitle () Функция (она означает «супер название»).

# Same plot as above
plt.subplot(2, 2, 1)
plt.title('First Title')

plt.subplot(2, 2, 2)
plt.title('Second Title')

plt.subplot(2, 2, 3)
plt.title('Third Title')

plt.subplot(2, 2, 4)
plt.title('Fourth Title')

# Add overall title to the plot
plt.suptitle('My Lovely Plot')
plt.tight_layout()
plt.show()

Высота subplot matplotlib

Чтобы изменить высоту субплата в MatPlotlib, см. Следующий раздел.

Размер subplot matplotlib

У вас есть полный контроль над размером подломов в Matplotlib.

Вы можете либо изменить размер всего Рисунок или размер Подломы самих себя.

Давайте посмотрим на изменение Рисунок Отказ

Матплотлиб Рисунок Размер

Во-первых, что такое Рисунок ? Процитировать Анатомиофматплотлиб :

Это общее окно/страница, на которой все нарисовано. Вы можете иметь несколько независимых цифр и Цифры может содержать несколько Подразделение

Другими словами, Рисунок Пустой холст вы «краска» все ваши участки.

Если вы довольны размером ваших подломов, но вы хотите, чтобы окончательное изображение было больше/меньше, измените Рисунок Отказ Сделайте это в верхней части вашего кода с Матплотлиб Рисунок Функция – PLT.Figure () Отказ

# Make Figure 3 inches wide and 6 inches long
plt.figure(figsize=(3, 6))

# Create 2x1 grid of subplots
plt.subplot(211)
plt.subplot(212)
plt.show()

Перед кодированием любых подломов звоните PLT.Figure () и укажите Рисунок Размер с фигес аргумент Принимает кортеж из 2 чисел – (ширина, высота) изображения в дюймах.

Выше я создал участок 3 дюйма в ширину и 6 дюймов длиннее – plt.figure (figsize = (3, 6)) Отказ

# Make a Figure twice as long as it is wide
plt.figure(figsize=plt.figaspect(2))

# Create 2x1 grid of subplots
plt.subplot(211)
plt.subplot(212)
plt.show()

Вы можете установить более общее Рисунок Размер с matplotlib figaspect функция. Это позволяет установить соотношение сторон (высоту/ширина) из Рисунок Отказ

Выше я создал Рисунок вдвое больше, чем он широко, установив figsize = plt.figaspect (2) Отказ

Примечание. Помните формулу соотношения соотношения аспектов (высота/ширина), вспоминая, что Высота на первый взгляд в алфавите.

Теперь давайте посмотрим на положить разные размеры Подломы на один Рисунок Отказ

MATPLOTLIB подкруты разные размеры

Самая сложная часть создания Рисунок с разными размерами Подломы В Matplotlib выясняется, какая фракция каждая Subplot занимает.

Итак, вы должны знать, на что вы стремитесь к началу. Вы можете набросать его на бумаге или нарисовать фигуры в PowerPoint. Как только вы сделали это, все остальное намного проще.

Я собираюсь создать эту форму

Я пометил фракцию каждый Subplot занимает, так как нам нужно это для нашего plt.subplot () звонки.

Я сначала создадим самую большой подборку и остальные в порядке убывания.

Правая сторона половина участка. Это один из двух участков на Рисунок с 1 строкой и 2 столбцами. Чтобы выбрать его с plt.subplot () , вам нужно установить index = 2 Отказ

Обратите внимание, что на изображении синие номера являются значениями индекса каждый Subplot имеет.

В коде, это

plt.subplot(122)

Теперь выберите нижнюю левую Subplot В A 2 × 2 GRID I.E. индекс = 3

plt.subplot(223)

Наконец, выберите два верхних Подломы На левой стороне 4 × 2 сетки I.E. индекс = 1 и index = 3 Отказ

plt.subplot(421)
plt.subplot(423)

Когда вы положите это в целом, вы получите

# Subplots you have just figured out
plt.subplot(122)
plt.subplot(223)
plt.subplot(421)
plt.subplot(423)

plt.tight_layout(pad=0.1)
plt.show()

Идеальный! Ломать Подломы вниз на их отдельные части и зная форму, которую вы хотите, делает все проще.

Размер Subplot Matplotlib отличается

Возможно, вы заметили, что каждый из Подломы В предыдущем примере занял 1/х Фракция пространства – 1/2 , 1/4 и 1/8 Отказ

С функцией Subplot MatPlotlib вы можете Только создать Подломы То есть 1/х Отказ

Невозможно создать вышеуказанный участок в Matplotlib с использованием plt.subplot () функция. Однако, если вы используете MATPLOTLIB подломов Функция или Gridspec Тогда это можно сделать.

Matplotlib subplts_adjust.

Если вы не довольны расстоянием между участками, которые plt.tight_layout () Предоставляет, вручную отрегулировать его с помощью plt.subplots_adjust () Отказ

Требуется 6 необязательных, самоуверенных аргументов ключевых слов. Каждый извлекает поплавок в диапазоне [0,0, 1,0], и они являются частью размера шрифта:

  • левый , правильно , снизу и верх это расстояние с каждой стороны Субплата
  • Wspaceширина между Подразделение
  • HspaceВысота между Подразделение
# Same grid as above
plt.subplot(122)
plt.subplot(223)
plt.subplot(421)
plt.subplot(423)

# Set horizontal and vertical space to 0.05
plt.subplots_adjust(hspace=0.05, wspace=0.05)
plt.show()

В этом примере я уменьшил как высоту, так и ширину для просто 0,05 Отказ Сейчас вряд ли нет места между участками.

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

Matplotlib subplot dpi.

Точки на дюйм (DPI) – это мера разрешения принтера. Это количество цветных точек, помещенных на каждый квадратный дюйм бумаги, когда он напечатан. Чем больше точек у вас есть, тем выше качество изображения. Если вы собираетесь распечатать свой участок на большом плакате, это хорошая идея использовать большой DPI.

DPI для каждого Рисунок контролируется plt.rcparams Словарь ( Хотите освоить словари? Не стесняйтесь читать Учебное пособие в Ultimate Finxter ). Содержит все Конфигурация времени выполнения настройки. Если вы печатаете plt.rcparams На экран вы увидите все переменные, которые вы можете изменить. Мы хотим high.dpi Отказ

Давайте сначала сделаем простую строку сюжетом с DPI по умолчанию (72,0), а затем намного меньшее значение.

# Print default DPI
print(f"The default DPI in matplotlib is {plt.rcParams['figure.dpi']}")

# Default DPI
plt.plot([1, 2, 3, 4])
plt.title('DPI - 72.0')
plt.show()

# Smaller DPI
plt.rcParams['figure.dpi'] = 30.0
plt.plot([1, 2, 3, 4])
plt.title('DPI - 30.0')
plt.show()

# Change DPI back to 72.0
plt.rcParams['figure.dpi'] = 72.0
The default DPI in matplotlib is 72.0

Рисунок С меньшим DPI меньше и имеет более низкое разрешение.

Если вы хотите навсегда изменить DPI всех MATPLOTLIB Цифры – или любое из настроек конфигурации выполнения – найдите matplotlibrc Файл в вашей системе и измените его.

Вы можете найти это, введя

import matplotlib as mpl
mpl.matplotlib_fname()

После того, как вы нашли его, есть отмечает внутри, говоря вам, что все делает.

Межплотовое расстояние MATPLOTLIB

Функция plt.tight_layout () Решает большую часть ваших проблем между интервалом. Если этого недостаточно, назовите его по желанию Pad и пройти поплавок в диапазоне [0,0, 1,0]. Если это еще недостаточно, используйте plt.subplots_adjust () функция.

Я подробно объяснил оба этих функция дальше статьи.

MATPLOTLIB SUBPLOT COLORBAR

Добавление COLORBAR на каждый график такой же, как добавление заголовка – код его под plt.subplot () Позвоните, вы сейчас работаете. Давайте построим сетку 1 × 2, где каждый Subplot это тепловая карта случайно сгенерированных чисел.

Для получения дополнительной информации о случайном модуле Python, проверьте мою статью. Я использую Numpy Random Module ниже, но применяются те же идеи.

# Set seed so you can reproduce results
np.random.seed(1)

# Create a 10x10 array of random floats in the range [0.0, 1.0]
data1 = np.random.random((10, 10))
data2 = np.random.random((10, 10))

# Make figure twice as wide as it is long 
plt.figure(figsize=plt.figaspect(1/2))

# First subplot
plt.subplot(121)
pcm1 = plt.pcolormesh(data1, cmap='Blues')
plt.colorbar(pcm1)

# Second subplot
plt.subplot(122)
pcm2 = plt.pcolormesh(data2, cmap='Greens')
plt.colorbar(pcm2)

plt.tight_layout()
plt.show()

Во-первых, я создал немного (10, 10) Массивы, содержащие случайные числа от 0 до 1 с помощью NP.RANDOM.RANDOM () функция. Тогда я построил их как тепломаплы, используя plt.pcolormesh () Отказ Я сохранил результат и передал его на PLT.COLORBAR () Затем закончил сюжет.

Как это статья о Подломы Я не буду обсуждать Matplotlib Pcolormesh функционировать в деталях.

Поскольку эти сюжеты являются разными образцами тех же данных, вы можете построить их с тем же цветом и просто нарисовать одну крышу.

Чтобы нарисовать этот сюжет, используйте тот же код, что и выше и установите одинаковую Colormap в обоих Matplotlib Pcolormesh Звонки – cmap = 'blues' Отказ Затем нарисуйте колоритуру на второй подпункту.

Это не выглядит так хорошо, как указано выше Рисунок Так как Colorbar занимает пространство со второго Subplot Отказ К сожалению, вы не можете изменить это поведение – Корот-карлбар занимает пространство из Subplot Это нарисовано рядом с.

Можно Нарисуйте Colorbars над несколькими Подломы Но вам нужно использовать plt.subplots () функция. Я написал целое учебное пособие по этому – так что не стесняйтесь проверить эту более мощную функцию!

Matplotlib Subplot Grid

А Сетка Количество рядов и столбцов, которые вы указываете при вызове plt.subplot () Отказ Каждый раздел Сетка называется клетки Отказ Вы можете создать сетку любого размера, которую вы хотите. Но plt.subplot () Только создает Подломы это охватывает одну клетку. Создать Подломы Это охватывает несколько ячеек, используйте Gridspec Класс , plt.subplots () Функция или subplot2grid метод.

Я обсуждаю это подробно в своей статье на подломов MatPlotlib.

Резюме

Теперь вы знаете все, что нужно знать о функции Subplot в MatPlotlib.

Вы можете создавать сетки любого размера, который вы хотите, и рисуйте подломы любого размера – до тех пор, пока он занимает 1/х Th сюжета. Если вы хотите больше или меньше Рисунок Вы можете изменить его с PLT.Figure () функция. Кроме того, вы можете управлять DPI, интервал и установите заголовок.

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

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

Чтобы узнать, как создавать более подробные участки с меньшими строками кода, прочитайте мою статью о plt.subplots () (с «S» функцией.

Куда пойти отсюда?

Вы хотите, чтобы вы могли быть программистом на полный рабочий день, но не знаете, как начать?

Проверьте мой чистый вебинар на упаковке чистых ценностей, где я учу вас стать фрилансером Python за 60 дней или вернуть ваши деньги!

https://tinyurl.com/become-a-python-freelancer

Неважно, если вы начинаете питон или Python Pro. Если вы не делаете шесть фигур/год с Python прямо сейчас, вы узнаете что-то из этого вебинара.

Это доказаны, методы NO-BS, которые получают ваши результаты быстро.

Этот вебинар не будет онлайн навсегда. Нажмите на ссылку ниже, прежде чем сиденья наполнится и научитесь стать фрилансером Python, гарантированно. https://tinyurl.com/become-a-python-freelancer.

Преобразование WordPress от Plt.subplot.ipynb by nb2wp v0.3.1

Expert Writer & Content Creator – наука о науке и машине.

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

Работать со мной, пожалуйста, обратитесь к Upwork
https://tinyurl.com/hire-adam-murphy.