НейроАгент

Как изменить размер фигуры Matplotlib

Узнайте 3 способа изменения размера фигуры Matplotlib: параметр figsize, rcParams и set_size_inches(). Конвертируйте единицы измерения, управляйте глобальными/локальными настройками и освоите изменение размеров подграфиков для идеальных визуализаций.

Вопрос

Как изменить размер фигур, нарисованных с помощью Matplotlib?

НейроАгент

Чтобы изменить размер рисунков, созданных с помощью Matplotlib, можно использовать три основных метода: параметр figsize в plt.figure() или plt.subplots(), установку глобальных значений по умолчанию с помощью plt.rcParams['figure.figsize'] или изменение существующих рисунков с помощью set_size_inches(). Параметр figsize принимает кортеж (ширина, высота) в дюймах, и вы можете конвертировать между разными единицами измерения с помощью соответствующих коэффициентов преобразования. Каждый метод имеет свои конкретные случаи использования в зависимости от того, нужно ли устанавливать глобальные значения по умолчанию, создавать отдельные рисунки с определенными размерами или изменять существующие рисунки.

Содержание

Основные методы изменения размера рисунка

Самый прямой способ изменить размер рисунка в Matplotlib - использовать параметр figsize при создании нового рисунка. Этот параметр принимает кортеж, указывающий ширину и высоту рисунка в дюймах.

Метод 1: Использование plt.figure()

python
import matplotlib.pyplot as plt

# Создать рисунок с пользовательским размером (ширина=10 дюймов, высота=6 дюймов)
plt.figure(figsize=(10, 6))
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
plt.title('Рисунок размером 10x6 дюймов')
plt.show()

Метод 2: Использование plt.subplots()

Для рисунков, которые будут содержать подграфики, можно указать размер непосредственно в функции subplots():

python
# Создать рисунок с подграфиками и пользовательским размером
fig, axes = plt.subplots(2, 2, figsize=(12, 8))
axes[0,0].plot([1, 2, 3], [1, 2, 3])
axes[0,1].plot([1, 2, 3], [3, 2, 1])
axes[1,0].plot([1, 2, 3], [2, 3, 1])
axes[1,1].plot([1, 2, 3], [1, 3, 2])
plt.suptitle('Рисунок размером 12x8 дюймов с подграфиками')
plt.tight_layout()
plt.show()

Согласно официальной документации Matplotlib, размер рисунка по умолчанию составляет [6.4, 4.8] дюймов, если не указан параметр figsize.

Различные единицы измерения и преобразования

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

Преобразование из сантиметров

Поскольку 1 дюйм = 2.54 сантиметра, можно преобразовать сантиметры в дюймы, разделив на 2.54:

python
# Создать рисунок с размером, указанным в сантиметрах
width_cm = 20
height_cm = 15
width_in = width_cm / 2.54
height_in = height_cm / 2.54

plt.figure(figsize=(width_in, height_in))
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
plt.title(f'Рисунок размером {width_cm}x{height_cm} см')
plt.show()

Преобразование из пикселей

Чтобы преобразовать пиксели в дюймы, нужно разделить на значение DPI (dots per inch - точек на дюйм). Значение DPI по умолчанию обычно составляет 100:

python
# Создать рисунок с размером, указанным в пикселях
width_px = 800
height_px = 600

# Преобразовать пиксели в дюймы с использованием текущего DPI
dpi = plt.rcParams['figure.dpi']
px = 1 / dpi  # коэффициент преобразования: пиксели в дюймы

plt.figure(figsize=(width_px * px, height_px * px))
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
plt.title(f'Рисунок размером {width_px}x{height_px} пикселей')
plt.show()

Как указано в документации Matplotlib по единицам измерения размера рисунка, из-за значения по умолчанию rcParams['figure.dpi'] = 100, можно мысленно делить необходимое значение пикселей на 100.

Глобальные и локальные настройки размера рисунка

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

Глобальные настройки с помощью rcParams

Чтобы установить размер рисунка по умолчанию для всех рисунков в вашем скрипте или блокноте, используйте plt.rcParams:

python
import matplotlib.pyplot as plt

# Установить глобальный размер рисунка по умолчанию
plt.rcParams['figure.figsize'] = (8, 6)
plt.rcParams['figure.dpi'] = 120

# Все последующие рисунки будут использовать эти значения по умолчанию
plt.figure()
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
plt.title('Глобальная настройка размера (8x6 дюймов)')
plt.show()

# Вы можете переопределить глобальную настройку для конкретных рисунков
plt.figure(figsize=(12, 8))
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
plt.title('Переопределенный размер (12x8 дюймов)')
plt.show()

Важное примечание для пользователей Jupyter Notebook: Как упоминается в статье в блоге MLJar, вы должны устанавливать rcParams в отдельной ячейке ниже импортов. Установка rcParams в той же ячейке, что и импорт matplotlib, не приведет к каким-либо изменениям.

Локальные настройки

Для единичных размеров рисунков локальный подход с использованием figsize более подходит, так как он не влияет на другие части вашего кода:

python
# Создать рисунок с размером по умолчанию
plt.figure()
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
plt.title('Рисунок с размером по умолчанию')

# Создать другой рисунок с пользовательским размером
plt.figure(figsize=(15, 10))
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
plt.title('Пользовательский рисунок размером 15x10 дюймов')
plt.show()

Лучшие практики и распространенные сценарии

Когда использовать каждый метод

Используйте глобальные настройки (rcParams) когда:

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

Используйте локальные настройки (figsize) когда:

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

Распространенные размеры рисунков и случаи использования

python
# Рисунки для публикаций (часто 300 DPI)
plt.rcParams['figure.dpi'] = 300
plt.rcParams['figure.figsize'] = (5, 4)  # Распространенный размер рисунка в журналах

# Слайды для презентаций (большие, с меньшим DPI)
presentation_figsize = (10, 8)
presentation_dpi = 100
plt.figure(figsize=presentation_figsize, dpi=presentation_dpi)

# Отображение в веб (соотношение сторон)
web_figsize = (12, 6)  # Широкое соотношение сторон для веб
plt.figure(figsize=web_figsize)

Согласно руководству Towards Data Science, вы можете изменить размер рисунка без использования окружения figure, обновив matplotlib.rcParams, который является экземпляром RcParams для обработки значений по умолчанию Matplotlib.

Работа с подграфиками

При работе с подграфиками у вас есть несколько вариантов контроля размера рисунка:

Метод 1: Указать размер в plt.subplots()

python
# Создать подграфики с пользовательским размером рисунка
fig, axes = plt.subplots(2, 3, figsize=(15, 10))
for i, ax in enumerate(axes.flat):
    ax.plot([1, 2, 3], [i+1, i+2, i+3])
plt.suptitle('Рисунок с подграфиками размером 15x10 дюймов')
plt.tight_layout()
plt.show()

Метод 2: Регулировать размеры отдельных подграфиков

Вы также можете контролировать размер отдельных подграфиков с помощью GridSpec:

python
import matplotlib.gridspec as gridspec

fig = plt.figure(figsize=(12, 8))
gs = gridspec.GridSpec(2, 2, figure=fig, width_ratios=[1, 2], height_ratios=[1, 1])

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], [1, 2, 3])
ax2.plot([1, 2, 3], [3, 2, 1])
ax3.plot([1, 2, 3, 4], [1, 4, 2, 3])

plt.suptitle('Пользовательский макет подграфиков')
plt.tight_layout()
plt.show()

Изменение существующих рисунков

Если у вас уже есть созданный рисунок и вы хотите изменить его размер, вы можете использовать несколько методов:

Метод 1: set_size_inches()

python
# Создать рисунок с размером по умолчанию
fig = plt.figure()
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
plt.title('Исходный размер')

# Изменить размер рисунка
fig.set_size_inches(10, 6)
plt.draw()  # Требуется для обновления отображения
plt.title('Измененный размер (10x6 дюймов)')
plt.show()

Метод 2: set_figwidth() и set_figheight()

Для изменения только одного измерения:

python
fig = plt.figure(figsize=(6, 4))
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])

# Изменить только ширину
fig.set_figwidth(10)
plt.draw()
plt.title('Ширина изменена на 10 дюймов')
plt.show()

Метод 3: set_dpi()

Изменение разрешения без изменения физического размера:

python
fig = plt.figure(figsize=(8, 6))
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])

# Изменить DPI (влияет на пиксельные размеры, но не на физический размер)
fig.set_dpi(150)
plt.draw()
plt.title('DPI изменен на 150')
plt.show()

Как указано в статье в блоге MLJar, если у вас уже есть созданный рисунок (или он был создан другим пакетом), вы можете манипулировать его размером и dpi с помощью функций set_figwidth, set_figheight, set_size_inches, set_dpi.

Заключение

Изменение размеров рисунков в Matplotlib становится простым, как только вы понимаете доступные методы и их соответствующие случаи использования. Вот основные выводы:

  1. Используйте параметр figsize при создании отдельных рисунков с определенными размерами - это наиболее распространенный и прямой подход
  2. Используйте rcParams для установки глобальных значений по умолчанию, которые применяются ко всем рисункам в вашем проекте
  3. Понимайте преобразования единиц измерения - дюймы являются единицей по умолчанию, но вы можете легко преобразовывать из сантиметров (делить на 2.54) или пикселей (делить на DPI)
  4. Выбирайте правильный метод для подграфиков - используйте figsize в plt.subplots() или GridSpec для сложных макетов
  5. Изменяйте существующие рисунки с помощью методов set_size_inches(), set_figwidth(), set_figheight() или set_dpi()

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


Источники

  1. Как изменить размер рисунков, созданных с помощью Matplotlib? - Stack Overflow
  2. Размер рисунка в Matplotlib – как изменить размер графика в Python с помощью plt.figsize() - freeCodeCamp
  3. Как изменить размер рисунков в Matplotlib? - GeeksforGeeks
  4. matplotlib.pyplot.figure — документация Matplotlib 3.10.7
  5. Размер рисунка в разных единицах измерения — документация Matplotlib 3.10.7
  6. Изменить размер графика в Matplotlib - Python - GeeksforGeeks
  7. 3 способа изменения размера рисунка в Matplotlib - MLJar
  8. Изменить размер рисунка в Matplotlib - Stack Abuse
  9. Как изменить размер рисунков в Matplotlib | Towards Data Science
  10. Освоение единиц измерения размера рисунка в Matplotlib | от LabEx | Medium