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

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

Все, что вам нужно знать, чтобы освоить функцию подборков MATPLOTLIB. Узнайте, как построить любую форму, которую вы можете себе представить [+ бонусное видео]

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

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

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

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

Начнем с краткого ответа о том, как его использовать – вы узнаете все детали позже!

То plt.subplots () Функция создает а Фигура а также a Обмотка из Субплата / Оси Объекты, которые вы храните в Инжир а также оси соответственно.

Укажите количество строк и столбцов, которые вы хотите с цыган а также ncols. аргументы.

fig, axes = plt.subplots(nrows=3, ncols=1)

Это создает а Фигура а также Подразделение в сетке 3 × 1. Numpy Array оси имеет форму (nrows, ncols) та же форма, что и сетка, в этом случае (3,) (Это 1-м массива с одного из цыган или ncols. 1). Доступ каждого Субплата Использование Numpy ломтик и позвонить участок() Способ построить линейный график.

Как только все Подломы были построены, позвоните 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)]

# Generate Figure object and Axes object with shape 3x1
fig, axes = plt.subplots(nrows=3, ncols=1)

# Access first Subplot and plot linear numbers
axes[0].plot(linear)

# Access second Subplot and plot square numbers
axes[1].plot(square)

# Access third Subplot and plot cube numbers
axes[2].plot(cube)

plt.tight_layout()
plt.show()

Матплотлиб фигурки и оси

До сих пор вы, вероятно, сделали все свои участки с функциями в matplotlib.pyplot I.E. Все функции, которые начинаются с отказ .

Эти работают красиво, когда вы нарисуете один сюжет одновременно. Но рисовать несколько участков на один Фигура Вам нужно изучить базовые классы в Matplotlib.

Давайте посмотрим на изображение, которое объясняет основные классы из Анатомиофматплотлиб руководство:

Цитировать анатомию Матплотлиба:

Рисунок Это контейнер верхнего уровня в этой иерархии. Это общее окно/страница, на которой все нарисовано. Вы можете иметь несколько независимых цифр и Рисунок S может содержать несколько Оси Отказ

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

Каждый Оси имеет Xaxis и а Yaxis Отказ Они содержат галочки, метки, этикетки и т. Д. В этом руководстве мы в основном будем контролировать галочки, клещевые этикетки и ограничения данных с помощью других механизмов, поэтому мы не прикасаемся к человеку Ось Часть вещей все это много. Тем не менее, стоит упомянуть здесь, чтобы объяснить, где термин Оси происходит от.

Типичные имена переменной для каждого объекта:

  • РисунокРис или f ,
  • Оси (множественное число) – оси или оси ,
  • Оси (единственное число) – топор или a

Слово Оси Относится к области, на которой вы участвуете, и является синонимом Subplot Отказ Тем не менее, вы можете иметь несколько Оси ( Подложки ) на Рисунок Отказ В речи и написание используйте одно и то же слово для единственного и множественного числа. В вашем коде вы должны сделать различие между каждым – вы участвуете в единственном числе Оси Но будет хранить все Оси в Numpy Array.

Ось относится к Xaxis или Yaxis – Часть, которая получает клещи и этикетки.

Pyplot Модуль неявно работает на одном Рисунок и один Оси вовремя. Когда мы работаем с Подломы мы работаем с несколькими Оси на один Рисунок Отказ Итак, имеет смысл с участием в отношении Оси И гораздо легче отслеживать все.

Основные различия между использованием Оси Методы и Pyplot находятся:

  1. Всегда создавайте Рисунок и Оси Объекты на первой строке
  2. Сюжет, напишите AX.PLOT () вместо PLT.PLOT () Отказ

Как только вы получите это, вы не захотите вернуться к использованию Pyplot. . Намного проще создавать интересные и привлечение графики таким образом. На самом деле, именно поэтому большинство Stackoverflow отвечает написаны с этим синтаксисом.

Все функции в Pyplot иметь соответствующий метод, который вы можете позвонить на Оси Объекты, поэтому вам не нужно изучать какие-либо новые функции.

Давайте доберемся до этого.

Пример подполатов Matplotlib

plt.subplots () Функция создает Рисунок и простое массив Подломы / Оси Объекты, которые мы храним в Инжир и оси соответственно.

Укажите количество строк и столбцов, которые вы хотите с Золоты и ncols аргументы.

fig, axes = plt.subplots(nrows=3, ncols=1)

Это создает Рисунок и Подломы в сетке 3 × 1. Numpy массив оси такая же форма, как сетка, в этом случае (3,) Отказ Доступ каждого Subplot Использование Numpy Notice Notiation и позвоните в Участок () Способ построить линейный график.

Как только все Подломы были построены, позвоните plt.tight_layout () Обеспечить никакие части участков перекрытия. Наконец, позвоните PLT.Show () отображать свой сюжет.

fig, axes = plt.subplots(nrows=2, ncols=2)

plt.tight_layout()
plt.show()

Самые важные аргументы для plt.subplots () похожи на matplotlib subplot Функция, но может быть указана с ключевыми словами. Кроме того, есть более мощные, которые мы обсудим позже.

Создать Рисунок с одним Оси Объект, назвать это без аргументов

fig, ax = plt.subplots()

Примечание: это неявно вызывается всякий раз, когда вы используете Pyplot модуль. Все «нормальные» участки содержат один Рисунок и один Оси Отказ

В передовых сообщениях в блоге и ответах Stackoverflow вы увидите линию, аналогичную этому в верхней части кода. Это гораздо больше питон, чтобы создать свои участки по отношению к Рисунок и Оси Отказ

Создать Сетка подломов, укажите цыган и ncols. – количество рядов и столбцов соответственно

fig, axes = plt.subplots(nrows=2, ncols=2)

Переменная оси Одноместный массив с формой (nrows, ncols) Отказ Обратите внимание, что он находится в основной форме, чтобы указать, что она содержит более одного Оси объект. Другое общее имя – оси . Выберите, что вы предпочитаете. Если вы звоните plt.subplots () Без имени аргумента переменная топор Как есть только один Оси Объект возвращен.

Я выберу каждый Оси Объект с нарезной обозначением и сюжетом с использованием соответствующих методов. Так как я использую намеку Numpy, индекс первого Оси 0, а не 1.

# Create Figure and 2x2 gris of Axes objects
fig, axes = plt.subplots(nrows=2, ncols=2)

# Generate data to plot. 
data = np.array([1, 2, 3, 4, 5])

# Access Axes object with Numpy slicing then plot different distributions
axes[0, 0].plot(data)
axes[0, 1].plot(data**2)
axes[1, 0].plot(data**3)
axes[1, 1].plot(np.log(data))

plt.tight_layout()
plt.show()

Сначала я импортирую необходимые модули, затем создайте Рисунок и Оси Объекты, использующие plt.subplots () Отказ Оси Объект – это простой массив с формой (2, 2) И я получаю доступ к каждому Subplot через Numpy Shicing перед выполнением линейного графика данных. Тогда я звоню plt.tight_layout () Чтобы гарантировать, что этикетки оси не перекрываются с самими участками. Наконец, я звоню PLT.Show () Как вы делаете в конце всех участков MatPlotlib.

Matplotlib подпилоты Название

Чтобы добавить общий заголовок на Рисунок , используйте plt.suptitle () Отказ

Чтобы добавить название каждому Оси У вас есть два метода на выбор:

  1. AX.SET_TITLE ('BAR')
  2. AX.SET (title = 'bar')

В общем, вы можете настроить все, что вы хотите на Оси используя любой из этих методов. Рекомендую использовать AX.SET () потому что вы можете пройти любой Функция сеттера к этому как аргумент ключевых слов. Это быстрее, чтобы ввести, занимает меньше строк кода и легче читать.

Давайте установим название, XLabel и YLabel для двух Подломы Используя оба метода для сравнения

# Unpack the Axes object in one line instead of using slice notation
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2)

# First plot - 3 lines
ax1.set_title('many')
ax1.set_xlabel('lines')
ax1.set_ylabel('of code')

# Second plot - 1 line
ax2.set(title='one', xlabel='line', ylabel='of code')

# Overall title
plt.suptitle('My Lovely Plot')
plt.tight_layout()
plt.show()

Ясно используя AX.SET () это лучший выбор.

Обратите внимание, что я распаковал Оси объект в отдельные переменные на первой строке. Вы можете сделать это вместо Numpy Slicing, если вы предпочитаете. Это легко сделать с 1D массивами. Как только вы создаете сетки с несколькими рядами и столбцами, легче читать, если вы не распаковываете их.

MATPLOTLIB подломов делятся оси X

Чтобы поделиться оси X для подломов в Matplotlib, установить Sharex = Правда В вашем plt.subplots () вызов.

# Generate data
data = [0, 1, 2, 3, 4, 5]

# 3x1 grid that shares the x axis
fig, axes = plt.subplots(nrows=3, ncols=1, sharex=True)

# 3 different plots
axes[0].plot(data)
axes[1].plot(np.sqrt(data))
axes[2].plot(np.exp(data))

plt.tight_layout()
plt.show()

Здесь я создал 3 линейных участка, которые показывают линейный, квадратный корневой и экспоненциальный элемент чисел 0-5.

Когда я использовал те же цифры, имеет смысл поделиться оси X.

Здесь я написал тот же код, но набор Sharex = Ложь (поведение по умолчанию). Сейчас есть ненужные этикетки оси на топ-2 участках.

Вы также можете поделиться оси Y для участков, установив постановка = Правда В вашем plt.subplots () вызов.

Matplotlib Subplots Legend

Чтобы добавить легенду к каждому Оси , ты должен

  1. Этикетка, используя этикетка ключевое слово
  2. Позвоните AX.LEGEND () на Оси Вы хотите, чтобы легенда появилась

Давайте посмотрим на тот же сюжет, что и выше, но добавьте легенду на каждый Оси Отказ

# Generate data, 3x1 plot with shared XAxis
data = [0, 1, 2, 3, 4, 5]
fig, axes = plt.subplots(nrows=3, ncols=1, sharex=True)

# Plot the distributions and label each Axes
axes[0].plot(data, label='Linear')
axes[1].plot(np.sqrt(data), label='Square Root')
axes[2].plot(np.exp(data), label='Exponential')

# Add a legend to each Axes with default values
for ax in axes:
    ax.legend()

plt.tight_layout()
plt.show()

Легенда теперь говорит вам, какая функция была применена к данным. Я использовал цикл для звонка AX.LEGEND () на каждом из Оси . Я мог бы сделать это вручную вместо письма:

axes[0].legend()
axes[1].legend()
axes[2].legend()

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

Matplotlib Legend Функция занимает 2 аргумента

ax.legend(handles, labels)
  • Ручки – Линии/участки, которые вы хотите добавить в легенду (список)
  • этикетки – этикетки, которые вы хотите дать каждую строку (список)

Получить Ручки Сохраняя вывод вас AX.PLOT () звонки в списке. Вам нужно создать список этикетки сам. Тогда позвоните Легенда () на Оси Вы хотите добавить легенду.

# Generate data and 3x1 grid with a shared x axis
data = [0, 1, 2, 3, 4, 5]
fig, axes = plt.subplots(nrows=3, ncols=1, sharex=True)

# Store the output of our plot calls to use as handles
# Plot returns a list of length 1, so unpack it using a comma
linear, = axes[0].plot(data, 'b')
sqrt, = axes[1].plot(np.sqrt(data), 'r')
exp, = axes[2].plot(np.exp(data), 'g')

# Create handles and labels for the legend
handles = [linear, sqrt, exp]
labels = ['Linear', 'Square Root', 'Exponential']

# Draw legend on first Axes
axes[0].legend(handles, labels)

plt.tight_layout()
plt.show()

Сначала я сгенерировал данные и сетку 3 × 1. Тогда я сделал три AX.PLOT () Вызывы и приложены к другим функциям к данным.

Обратите внимание, что AX.PLOT () Возвращает Список matplotlib.line. Line2d объекты. Вы должны пройти эти Line2d объекты к AX.LEGEND () И поэтому нужно сначала распаковать их.

Стандартный распаковщик синтаксиса в Python:

a, b = [1, 2]
# a = 1, b = 2

Однако каждый AX.PLOT () Вызов возвращает список длин 1. Распаковать эти списки, записывать

x, = [5]
# x = 5

Если вы только что написали х = [5] Тогда х будет список, а не объект внутри списка.

После Участок () Звонки, я создал 2 списка обрабатывать и этикетки которые я передал оси [0] .legend () нарисовать его на первом участке.

В приведенном выше схеме я изменил Легенда Призыв к Оси [1] .legend (ручки, этикетки) построить его на второй (средний) Оси Отказ

Размер подломов Matplotlib

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

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

Во-первых, давайте посмотрим на изменение Рисунок Отказ

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

Если вы довольны размером ваших подломов, но вы хотите, чтобы окончательное изображение было больше/меньше, измените Рисунок Отказ

Если вы прочитали свою статью на функции MATPLOTLIB Subplot, вы знаете, чтобы использовать PLT.Figure () Функция, чтобы изменить Рисунок Отказ К счастью, любые аргументы прошли на plt.subplots () также переданы PLT.Figure () Отказ Итак, вам не нужно добавлять какие-либо дополнительные строки кода, просто аргументы ключевых слов.

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

# Create 2x1 grid - 3 inches wide, 6 inches long
fig, axes = plt.subplots(nrows=2, ncols=1, figsize=(3, 6))
plt.show()

Я создал сюжет 2 × 1 и установить Фигура Размер с фигес аргумент Это принимает кортеж из 2 чисел – (ширина, высота) изображения в дюймах.

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

# 2x1 grid - twice as long as it is wide
fig, axes = plt.subplots(nrows=2, ncols=1, figsize=plt.figaspect(2))
plt.show()

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

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

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

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

Если вы использовали plt.subplot () До ( Я написал целое руководство по этому тоже ), вы узнаете, что сетки, которые вы создаете, ограничены. Каждый Subplot должен быть частью обычной сетки I.e. Из формы 1/х Для некоторого целого числа x . Если вы создаете сетку 2 × 1, у вас есть 2 строки, а каждая строка занимает 1/2 пространства. Если вы создаете сетку 3 × 2, у вас есть 6 подразделений и каждый занимает 1/6 пространства.

Использование plt.subplots () Вы можете создать график 2 × 1 с 2 рядами, которые занимают любую долю пространства, которую вы хотите.

Давайте сделаем график 2 × 1, в котором верхний ряд занимает 1/3 пространства, а внизу занимает 2/3.

Вы делаете это, указав gridspec_kw аргумент и прохождение Словарь ценностей. Основные аргументы, которые мы заинтересованы в том, это width_ratios. и height_ratios. . Они принимают списки, которые указывают соотношения ширины колонн и высотных соотношений строк. В этом примере верхний ряд – 1/3 из Рисунок И дно это 2/3 Отказ Таким образом, коэффициент высоты является 1: 2 или [1, 2] в виде списка.

# 2 x1 grid where top is 1/3 the size and bottom is 2/3 the size
fig, axes = plt.subplots(nrows=2, ncols=1, 
                         gridspec_kw={'height_ratios': [1, 2]})

plt.tight_layout()
plt.show()

Единственная разница между этим и регулярным 2 × 1 plt.subplots () Звонок – это gridspec_kw аргумент Он принимает словарь значений. Они переданы на Matplotlib Gridspec Конструктор (базовый класс, который создает сетку).

Давайте создадим сюжет 2 × 2 с тем же [1, 2] Коэффициенты высоты, но давайте сделаем левую колонну занять 3/4 пространства.

# Heights: Top row is 1/3, bottom is 2/3 --> [1, 2]
# Widths : Left column is 3/4, right is 1/4 --> [3, 1]
ratios = {'height_ratios': [1, 2],
          'width_ratios': [3, 1]}

fig, axes = plt.subplots(nrows=2, ncols=2, gridspec_kw=ratios)

plt.tight_layout()
plt.show()

Все так же, как предыдущий сюжет, но теперь у нас есть 2 × 2 сетка и указывалось width_ratios Отказ Так как левая колонка занимает 3/4 пространства и право занимает 1/4 Соотношения являются [3, 1] .

Размер подломов Matplotlib

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

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

Вам нужно использовать fig.add_subplot () метод, и он имеет такую же обозначение, как plt.subplot () Отказ Так как это Рисунок Метод, сначала нужно создать один с PLT.Figure () функция.

fig = plt.figure()

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

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

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

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

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

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

Помните, что индексация начинается с 1 для функций plt.subplot () и fig.add_subplot () Отказ

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

ax1 = fig.add_subplot(122)

Как вы работаете с Оси Объекты, вам нужно хранить результат fig.add_subplot () Так что вы можете сюжетать на нем потом.

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

ax2 = fig.add_subplot(223)

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

ax3 = fig.add_subplot(423)
ax4 = fig.add_subplot(421)

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

# Initialise Figure
fig = plt.figure()

# Add 4 Axes objects of the size we want
ax1 = fig.add_subplot(122)
ax2 = fig.add_subplot(223)
ax3 = fig.add_subplot(423)
ax4 = fig.add_subplot(421)

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

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

Теперь давайте сделаем то, с чем вы не можете сделать plt.subplot () Отказ Упустим 2 участки на левой стороне с нижним участком дважды высота, что и верхний график.

Как и с вышеупомянутым сюжетом, правая сторона – это половина участка с 1 строкой и 2 колоннами. Это index = 2 Отказ

Итак, первые две строки такие же, как предыдущий сюжет

fig = plt.figure()
ax1 = fig.add_subplot(122)

Верхний слева берет на себя 1/3 пространства левой половины участка. Таким образом, это занимает 1/3 x/6 общего участка. Итак, это индекс = 1 из 3 × 2 сетки.

ax2 = fig.add_subplot(321)

Последний Subplot занимает 2/3 оставшегося пространства I.E. индекс = 3 и index = 5 из 3 × 2 сетки. Но вы не можете добавить оба этих индекса, так как это добавит два Подломы к Фигура . Вам нужен способ добавить один Субплата что охватывает два ряда.

Вам нужен matplotlib subplot2grid Функция – PLT.SUBPLOT2GRID () Отказ Возвращает Оси объект и добавляет его к текущему Рисунок Отказ

Вот самые важные аргументы:

ax = plt.subplot2grid(shape, loc, rowspan, colspan)
  • Форма – кортеж из 2 целых чисел – Форма общего сетки E.g. (3, 2) имеет 3 ряда и 2 столбца.
  • loc – кортеж из 2 целых чисел – Расположение разместить Subplot в сетке. Он использует 0 индексацию на основе 0, так что (0, 0) – первая строка, первый столбец и (1, 2) – вторая строка, третий столбец.
  • Rowspan – Целое число, по умолчанию 1- Количество строк для Subplot Продолжить вправо
  • Colspan – Целое число, по умолчанию 1 – количество столбцов для Subplot пропадать вниз

Из этих определений вам нужно выбрать среднюю левую Subplot и установить rospan = 2 Так что он охватывает 2 ряда.

Таким образом, аргументы, которые вам нужны для subplot2grid находятся:

  • Форма = (3, 2) – 3 × 2 сетка
  • loc = (1, 0) – Второй ряд, первый столбец (0 индексирование на основе)
  • rospan = 2 – пролет вниз 2 ряда

Это дает

ax3 = plt.subplot2grid(shape=(3, 2), loc=(1, 0), rowspan=2)

Sidenote: Почему MatPlotlib выбрал 0 индексацию на основе loc Когда все остальное Использует 1 индексацию на основе 1 загадка для меня. Один из способов запомнить, что это то, что loc похож на Расположение Отказ Это похоже на нарезку Numpy массивов, которые используют 0-индексирование. Кроме того, если вы используете Gridspec , вы часто будете использовать Numpy Slicing, чтобы выбрать количество строк и столбцов, которые Оси охватывать.

Положить это вместе, ты получаешь

fig = plt.figure()

ax1 = fig.add_subplot(122)
ax2 = fig.add_subplot(321)
ax3 = plt.subplot2grid(shape=(3, 2), loc=(1, 0), rowspan=2)

plt.tight_layout()
plt.show()

Matplotlib subplts_adjust.

Если вы не довольны расстоянием между участками, которые plt.tight_layout () Предоставляет, вручную отрегулировать расстояние между matplotlib subplts_adjust функция.

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

  • левый , правильно , снизу и верх это расстояние с каждой стороны Суеты
  • wspaceширина между Подразделение
  • Hspace.Высота между Подразделение

Давайте сравним Tight_layout с subplts_adjust Отказ

fig, axes = plt.subplots(nrows=2, ncols=2, sharex=True, sharey=True)

plt.tight_layout()
plt.show()

Вот сетка 2 × 2 с plt.tight_layout () Отказ Я установил Sharex. и Доля к Правда Удалить ненужные этикетки оси.

fig, axes = plt.subplots(nrows=2, ncols=2, sharex=True, sharey=True)

plt.subplots_adjust(wspace=0.05, hspace=0.05)
plt.show()

Теперь я уменьшил высоту и ширину между Подломы к 0,05 И вряд ли нет места между ними.

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

Matplotlib subplots colorbar

Добавление COLORBAR на каждый Оси похож на добавление легенды. Вы храните AX.PLOT () Позвоните в переменную и пропустите его на fig.colorbar () Отказ

Colorbars являются Рисунок Методы, поскольку они размещены на Рисунок Сама и не Оси Отказ Тем не менее, они занимают пространство из Оси они помещаются на.

Давайте посмотрим на пример.

# Generate two 10x10 arrays of random numbers in the range [0.0, 1.0]
data1 = np.random.random((10, 10))
data2 = np.random.random((10, 10))

# Initialise Figure and Axes objects with 1 row and 2 columns
# Constrained_layout=True is better than plt.tight_layout()
# Make twice as wide as it is long with figaspect
fig, axes = plt.subplots(nrows=1, ncols=2, constrained_layout=True,
                        figsize=plt.figaspect(1/2))

pcm1 = axes[0].pcolormesh(data1, cmap='Blues')
# Place first colorbar on first column - index 0
fig.colorbar(pcm1, ax=axes[0])

pcm2 = axes[1].pcolormesh(data2, cmap='Greens')
# Place second colorbar on second column - index 1
fig.colorbar(pcm2, ax=axes[1])

plt.show()

Во-первых, я сгенерировал два 10 × 10 массивов случайных чисел в диапазоне [0,0, 1,0] с использованием NP.RANDOM.RANDOM () функция. Тогда я инициализировал 1 × 2 сетку с plt.subplots () Отказ

Аргумент ключевых слов construced_layout =. Правда достигает аналогичного результата для звонков plt.tight_layout () Отказ Тем не менее, Tight_layout Только проверяет только галочки, этикетки оси и заголовки. Таким образом, он игнорирует колоритные и легенды и часто вызывает плохие графики. К счастью, Construced_layout принимает коровары и легенды во внимание. Таким образом, должно быть ваша запись, когда автоматически регулировка этих типов участков.

Наконец, я настроил figsize = plt.figaspect (1/2) Чтобы убедиться, что участки не слишком раздают вместе.

После этого я построил первую тепловую карту, окрашенный его синий и сохранил его в переменной pcm1. . Я передал это на fig.colorbar () и поместил его на первую колонку – оси [0] с топор Ключевое слово аргумент. Это похожая история для второго тепломапа.

Чем больше Оси У вас есть, любитель вы можете быть с Размещение корсных корпусов в Matplotlib Отказ Теперь давайте посмотрим на пример 2 × 2 с 4 Подломы Но только 2 колоритории.

# Set seed to reproduce results
np.random.seed(1)

# Generate 4 samples of the same data set using a list comprehension 
# and assignment unpacking
data1, data2, data3, data4 = [np.random.random((10, 10)) for _ in range(4)]

# 2x2 grid with constrained layout
fig, axes = plt.subplots(nrows=2, ncols=2, constrained_layout=True)

# First column heatmaps with same colormap
pcm1 = axes[0, 0].pcolormesh(data1, cmap='Blues')
pcm2 = axes[1, 0].pcolormesh(data2, cmap='Blues')

# First column colorbar - slicing selects all rows, first column
fig.colorbar(pcm1, ax=axes[:, 0])

# Second column heatmaps with same colormap
pcm3 = axes[0, 1].pcolormesh(data3+1, cmap='Greens')
pcm4 = axes[1, 1].pcolormesh(data4+1, cmap='Greens')

# Second column colorbar - slicing selects all rows, second column
# Half the size of the first colorbar
fig.colorbar(pcm3, ax=axes[:, 1], shrink=0.5)

plt.show()

Если вы проходите список Оси к топор Матплотлиб помещает колоритуру вдоль тех Оси . Более того, вы можете указать, где Colorbar с Расположение Ключевое слово аргумент. Это принимает строки «Нижние» , «Левый» , «правильно» , «верх» или «Центр» Отказ

Код аналогичен сюжету 1 × 2, который я сделал выше. Во-первых, я устанавливаю семена на 1, чтобы вы могли воспроизвести результаты – вы скоро будете снова сюжетать с цветными крышками в разных местах.

Я использовал Понимание списка Для генерации 4 образцов того же набор данных . Тогда я создал 2 × 2 сетку с plt.subplots () и установить construced_layout =. Правда чтобы убедиться, что ничего не совпадают.

Затем я сделал участки для первого столбца – оси [0, 0] и оси [1, 0] – и сохранил свой вывод. Я прошел один из них на fig.colorbar () Отказ Неважно, какой из pcm1. или PCM2. Я пропускаю, поскольку они просто разные образцы того же набора данных. Я установил AX = оси [:, 0] Использование Numpy Slicing Notiation, это все строки : и первый столбец 0 Отказ

Это аналогичный процесс для второго столбца, но я добавил 1 к data3 и data4 дать диапазон чисел в [1.0, 2.0] вместо этого. Наконец, я установил Shrink = 0,5 Чтобы сделать колоритуру половину его размера по умолчанию.

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

# Same as above
np.random.seed(1)
data1, data2, data3, data4 = [np.random.random((10, 10)) for _ in range(4)]
fig, axes = plt.subplots(nrows=2, ncols=2, constrained_layout=True)

# First row heatmaps with same colormap
pcm1 = axes[0, 0].pcolormesh(data1, cmap='Blues')
pcm2 = axes[0, 1].pcolormesh(data2, cmap='Blues')

# First row colorbar - placed on first row, all columns
fig.colorbar(pcm1, ax=axes[0, :], shrink=0.8)

# Second row heatmaps with same colormap
pcm3 = axes[1, 0].pcolormesh(data3+1, cmap='Greens')
pcm4 = axes[1, 1].pcolormesh(data4+1, cmap='Greens')

# Second row colorbar - placed on second row, all columns
fig.colorbar(pcm3, ax=axes[1, :], shrink=0.8)

plt.show()

Этот код аналогичен указанному выше, но участки того же цвета находятся в том же ряду, а не в том же колонке. Я также сократился крыс на 80% своего размера по умолчанию по настройке Shrink = 0,8 Отказ

Наконец, давайте установим синюю колоритуру в нижней части тепломаперов.

Вы можете изменить местоположение цветных корпусов с Расположение Аргумент ключевых слов в fig.colorbar () Отказ Единственная разница между этим сюжетом и тем выше, эта линия

fig.colorbar(pcm1, ax=axes[0, :], shrink=0.8, location='bottom')

Если вы увеличите фигес Аргумент, этот сюжет будет выглядеть намного лучше – на данный момент это довольно тесно.

Я рекомендую вам играть с MatPlotlib Colorbar Place. У вас есть полный контроль над тем, сколько цветов, которые вы надеваете на Рисунок , их расположение и сколько строк и столбцов они пролетают. Это некоторые основные идеи, но проверьте документы, чтобы увидеть больше примеров того, как вы можете Место Colorbars в Matplotlib Отказ

Matplotlib Subplot Grid

Я говорил о Gridspec Несколько раз в этой статье. Это базовый класс, который Определяет геометрию сетки, которую может быть размещен в Subplot в Отказ

Вы можете создать любую форму, которую вы хотите использовать plt.subplots () и PLT.SUBPLOT2GRID () Отказ Но некоторые из более сложных форм легче создавать использование Gridspec. . Если вы хотите стать всего PRO с MATPLOTLIB, проверьте документы и посмотрите на мою статью, обсуждая ее в будущем.

Резюме

Теперь вы можете создать любой Форма вы можете себе представить в Matplotlib. Поздравляю! Это огромное достижение. Не волнуйтесь, если вы не полностью понимаете все впервые. Я рекомендую вам в закладки этой статьи и от времени пересматривать ее.

Вы узнали базовые классы в Matplotlib: Рисунок , Оси , Xaxis а также Yaxis и как заговор с уважением к ним. Вы можете написать более короткий, более читаемый код, используя эти методы и AX.SET () Чтобы добавить заголовки, xlabels и многое другое для каждого Оси . Вы можете создавать более профессиональные графики, которые вы можете поделиться оси X Axis и Y и добавить легенды в любом месте.

Вы можете создать Цифры любого размера, который включает Подломы любого размера – вы больше не ограничены тем, кто занимается 1/х Th сюжета. Вы знаете, что сделать лучшие участки, вы должны планировать заранее и выяснить форму, которую вы стремитесь.

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

Наконец, вы можете добавить Colorbars так много Оси Как вы хотите и поместите их везде, где бы вы ни хотели.

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

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

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

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

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

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

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

Этот вебинар не будет онлайн навсегда. Нажмите на ссылку ниже, прежде чем сиденья наполнится и научитесь стать фрилансером Python, гарантированно.

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

Expert Writer & Content Creator – наука о науке и машине. – Я помогаю образовательным компаниям создавать привлечение в блоге и видеоконтентах преподавания данных науки для начинающих. В отличие от моих конкурентов, я узнаю новые концепции каждый день и так понимаю, что это нравится быть студентом. Мои статьи легко понять, эффективны и приятно читать. Мои видео достойны, участвуют и подробно. – Работать со мной, пожалуйста, обратитесь к Upwork https://tinyurl.com/hire-adam-murphy

Оригинал: “https://blog.finxter.com/matplotlib-subplots/”