Підграфіки
Функція subplots()
з модуля pyplot
призначена саме для цього. Раніше вона використовувалася для створення полотна у першому розділі, а тепер буде розглянута детальніше.
Рядки та стовпці
Найважливішими аргументами цієї функції є nrows
та ncolumns
, які визначають кількість рядків і стовпців у сітці підграфіків. За замовчуванням обидва дорівнюють 1, тому створюється лише один графік (Axes
).
Функція subplots()
повертає об'єкт Figure
та або один об'єкт Axes
, або масив об'єктів Axes
залежно від розміру сітки.
import matplotlib.pyplot as plt fig, axs = plt.subplots(2, 2) plt.show()
Було створено ґратку підграфіків розміром 2 на 2.
Оскільки існує кілька підграфіків, subplots
повертає масив об'єктів Axes
, який зазвичай зберігається у змінній з назвою axs
(однина ax
використовується для одного графіка).
У цьому випадку axs
є двовимірним масивом, тому для доступу до конкретного підграфіка потрібно вказати як індекс рядка, так і індекс стовпця.
import matplotlib.pyplot as plt import numpy as np data_linear = np.arange(1, 11) data_squared = data_linear ** 2 # Creating a 2x2 subplot grid fig, axs = plt.subplots(2, 2) # Creating a different plot for each Axes object axs[0, 0].plot(data_linear) axs[0, 1].plot(data_squared) axs[1, 0].scatter(data_linear, data_linear) axs[1, 1].scatter(data_linear, data_squared) plt.show()
У першому рядку (рядок 0) розміщено два лінійних графіки, а в другому рядку (рядок 1) — дві діаграми розсіювання.
Оскільки кожен графік розташований на окремому підграфіку, не можна використовувати plt.plot()
або plt.scatter()
безпосередньо. Необхідно викликати відповідний метод для кожного окремого об'єкта Axes
.
Перетворення у 1D-масив
Також можливо використати метод .ravel()
для перетворення двовимірного масиву Axes
у одномірний суцільний (flattened) масив:
import matplotlib.pyplot as plt import numpy as np data_linear = np.arange(1, 11) data_squared = data_linear ** 2 # Creating a 2x2 subplot grid fig, axs = plt.subplots(2, 2) # Flattening axs to a 1D array for easier indexing axs = axs.ravel() # Creating a different plot for each Axes object axs[0].plot(data_linear) axs[1].plot(data_squared) axs[2].scatter(data_linear, data_linear) axs[3].scatter(data_linear, data_squared) plt.show()
За допомогою масиву 2x2, axs.ravel()
перетворює його на одномірний масив, що містить чотири елементи.
Спільна вісь
Функція subplots()
також має параметри sharex
та sharey
. Вони визначають, чи будуть x або y осі спільними для всіх підграфіків. Обидва параметри за замовчуванням встановлені у значення False
.
import matplotlib.pyplot as plt import numpy as np data_linear = np.arange(1, 11) data_squared = data_linear ** 2 # Create a 2x2 subplot grid with shared x-axis across all subplots fig, axs = plt.subplots(2, 2, sharex=True) # Flatten axs array for easier indexing axs = axs.ravel() # Plotting different data on each subplot axs[0].plot(data_linear) axs[1].plot(data_squared) axs[2].scatter(data_linear, data_linear) axs[3].scatter(data_linear, data_squared) plt.show()
Встановлення параметра sharex=True
забезпечує спільну вісь x для всіх підграфіків, що є корисним у цьому випадку, оскільки всі підграфіки використовують однакові значення по осі x.
Також можна встановити sharex
або sharey
у значення 'row'
, щоб об'єднати вісь у межах кожного рядка підграфіків, або 'col'
— для об'єднання в межах кожного стовпця підграфіків.
Як завжди, не соромтеся досліджувати більше у
subplots()
documentation якщо бажаєте.
Swipe to start coding
- Використати відповідну функцію для створення сітки підграфіків.
- Сітка повинна містити 3 рядки та 1 стовпець (вказати перші два параметри).
- Вказати останній іменований аргумент, щоб вісь x була спільною для всіх підграфіків.
- Зберегти результат функції створення підграфіків у змінних
fig
таaxs
(зліва направо). - Розмістити перший лінійний графік для
data_linear
у першому рядку (рядок0
) сітки підграфіків. - Розмістити другий лінійний графік для
data_squared
у другому рядку (рядок1
) сітки підграфіків. - Розмістити третій лінійний графік для
data_exp
у третьому рядку (рядок2
) сітки підграфіків.
Рішення
Дякуємо за ваш відгук!