Как изменить размер фигур, нарисованных с помощью Matplotlib?
Чтобы изменить размер рисунков, созданных с помощью Matplotlib, можно использовать три основных метода: параметр figsize в plt.figure() или plt.subplots(), установку глобальных значений по умолчанию с помощью plt.rcParams['figure.figsize'] или изменение существующих рисунков с помощью set_size_inches(). Параметр figsize принимает кортеж (ширина, высота) в дюймах, и вы можете конвертировать между разными единицами измерения с помощью соответствующих коэффициентов преобразования. Каждый метод имеет свои конкретные случаи использования в зависимости от того, нужно ли устанавливать глобальные значения по умолчанию, создавать отдельные рисунки с определенными размерами или изменять существующие рисунки.
Содержание
- Основные методы изменения размера рисунка
- Различные единицы измерения и преобразования
- Глобальные и локальные настройки размера рисунка
- Лучшие практики и распространенные сценарии
- Работа с подграфиками
- Изменение существующих рисунков
Основные методы изменения размера рисунка
Самый прямой способ изменить размер рисунка в Matplotlib - использовать параметр figsize при создании нового рисунка. Этот параметр принимает кортеж, указывающий ширину и высоту рисунка в дюймах.
Метод 1: Использование plt.figure()
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():
# Создать рисунок с подграфиками и пользовательским размером
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:
# Создать рисунок с размером, указанным в сантиметрах
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:
# Создать рисунок с размером, указанным в пикселях
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:
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 более подходит, так как он не влияет на другие части вашего кода:
# Создать рисунок с размером по умолчанию
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) когда:
- Вам нужны разные размеры для разных типов графиков
- Вы создаете скрипт, который может использоваться как часть более крупной системы
- Вам нужна точная контроль над размерами отдельных рисунков
Распространенные размеры рисунков и случаи использования
# Рисунки для публикаций (часто 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()
# Создать подграфики с пользовательским размером рисунка
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:
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()
# Создать рисунок с размером по умолчанию
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()
Для изменения только одного измерения:
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()
Изменение разрешения без изменения физического размера:
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 становится простым, как только вы понимаете доступные методы и их соответствующие случаи использования. Вот основные выводы:
- Используйте параметр
figsizeпри создании отдельных рисунков с определенными размерами - это наиболее распространенный и прямой подход - Используйте
rcParamsдля установки глобальных значений по умолчанию, которые применяются ко всем рисункам в вашем проекте - Понимайте преобразования единиц измерения - дюймы являются единицей по умолчанию, но вы можете легко преобразовывать из сантиметров (делить на 2.54) или пикселей (делить на DPI)
- Выбирайте правильный метод для подграфиков - используйте
figsizeвplt.subplots()илиGridSpecдля сложных макетов - Изменяйте существующие рисунки с помощью методов
set_size_inches(),set_figwidth(),set_figheight()илиset_dpi()
Для достижения наилучших результатов учитывайте ваш конкретный случай использования: рисунки для публикаций часто требуют более высоких значений DPI, в то время как для веб-отображения могут быть полезны разные соотношения сторон. Всегда тестируйте ваши рисунки в конечной среде отображения, чтобы убедиться, что они выглядят так, как задумано.
Источники
- Как изменить размер рисунков, созданных с помощью Matplotlib? - Stack Overflow
- Размер рисунка в Matplotlib – как изменить размер графика в Python с помощью plt.figsize() - freeCodeCamp
- Как изменить размер рисунков в Matplotlib? - GeeksforGeeks
- matplotlib.pyplot.figure — документация Matplotlib 3.10.7
- Размер рисунка в разных единицах измерения — документация Matplotlib 3.10.7
- Изменить размер графика в Matplotlib - Python - GeeksforGeeks
- 3 способа изменения размера рисунка в Matplotlib - MLJar
- Изменить размер рисунка в Matplotlib - Stack Abuse
- Как изменить размер рисунков в Matplotlib | Towards Data Science
- Освоение единиц измерения размера рисунка в Matplotlib | от LabEx | Medium