Matplotlib предоставляет мощные инструменты для создания визуализаций, а настройка размеров подграфиков — ключ к эффективной коммуникации. В этой статье рассматриваются три метода создания подграфиков с разными размерами в Matplotlib, с примерами и пояснениями для каждого.
Оглавление
- Использование
gridspec
для гибких компоновок подграфиков - Использование
gridspec_kw
для лаконичного управления - Точное размещение с помощью
subplot2grid
Использование gridspec
для гибких компоновок подграфиков
Модуль matplotlib.gridspec
обеспечивает наиболее гибкий подход к созданию подграфиков разных размеров. Он позволяет определить сетку и затем назначать подграфики определенным областям этой сетки, управляя их относительными размерами с помощью height_ratios
и width_ratios
.
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
fig = plt.figure(figsize=(10, 6))
gs = gridspec.GridSpec(nrows=2, ncols=2, height_ratios=[2, 1], width_ratios=[1, 2])
ax1 = fig.add_subplot(gs[0, 0])
ax2 = fig.add_subplot(gs[0, 1])
ax3 = fig.add_subplot(gs[1, :]) # Занимает оба столбца
ax1.plot([1, 2, 3], [4, 5, 6])
ax2.plot([1, 2, 3], [6, 4, 5])
ax3.plot([1, 2, 3, 4, 5], [2, 4, 1, 3, 5])
plt.tight_layout()
plt.show()
Этот код создает сетку 2×2, где верхний ряд вдвое выше нижнего, а правый столбец вдвое шире левого. Каждый подграфик затем добавляется в свою назначенную область.
Использование gridspec_kw
для лаконичного управления
Для более простых компоновок аргумент gridspec_kw
в функции plt.subplots()
предлагает более лаконичную альтернативу. Он напрямую интегрирует функциональность gridspec без необходимости явного создания объекта gridspec
.
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2, 2, figsize=(10, 6), gridspec_kw={'height_ratios': [2, 1], 'width_ratios': [1, 2]})
axes[0, 0].plot([1, 2, 3], [4, 5, 6])
axes[0, 1].plot([1, 2, 3], [6, 4, 5])
axes[1, 0].plot([1, 2, 3], [2, 4, 1])
axes[1, 1].plot([1, 2, 3], [5, 3, 1])
plt.tight_layout()
plt.show()
Это достигает того же результата, что и пример с gridspec
, но с более чистым синтаксисом. Обратите внимание, что каждый подграфик здесь занимает одну ячейку; для охвата нескольких ячеек требуется более гибкий подход gridspec
.
Точное размещение с помощью subplot2grid
Функция subplot2grid
обеспечивает точный контроль над размещением подграфиков с помощью индексов строк и столбцов, а также атрибутов rowspan
и colspan
для определения размера и положения каждого подграфика в сетке.
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(10, 6))
ax1 = plt.subplot2grid((2, 2), (0, 0), rowspan=1, colspan=1)
ax2 = plt.subplot2grid((2, 2), (0, 1), rowspan=1, colspan=2)
ax3 = plt.subplot2grid((2, 2), (1, 0), rowspan=1, colspan=2)
ax1.plot([1, 2, 3], [4, 5, 6])
ax2.plot([1, 2, 3], [6, 4, 5])
ax3.plot([1, 2, 3, 4, 5], [2, 4, 1, 3, 5])
plt.tight_layout()
plt.show()
Несмотря на свою мощь, subplot2grid
может стать менее читаемым для сложных компоновок. Выберите метод, наиболее подходящий для ваших нужд: gridspec
для гибкости, gridspec_kw
для лаконичных простых компоновок и subplot2grid
для точного управления положением отдельных подграфиков.
Не забывайте всегда использовать plt.tight_layout()
, чтобы предотвратить перекрытие элементов и обеспечить чистый и профессиональный вид.