Как задать индивидуальный размер шрифта в Matplotlib
Узнайте, как установить разные размеры шрифтов для заголовка фигуры и меток осей в Matplotlib. Полное руководство с примерами кода для визуализации данных.
Как задать индивидуальные размеры шрифта для заголовка фигуры и меток осей в Matplotlib?
Я создаю фигуру в Matplotlib со следующим кодом:
from matplotlib import pyplot as plt
fig = plt.figure()
plt.plot(data)
fig.suptitle('test title')
plt.xlabel('xlabel')
plt.ylabel('ylabel')
fig.savefig('test.jpg')
Мне нужно указать разные размеры шрифта для заголовка фигуры и меток осей. Установка глобального размера шрифта через mpl.rcParams['font.size']=x не подходит, поскольку каждый элемент должен иметь свой размер. Как можно задать размеры шрифта для заголовка фигуры и меток осей отдельно в Matplotlib?
Для установки отдельных размеров шрифта заголовков фигур и осей в Matplotlib можно использовать специальные параметры в функциях suptitle, xlabel, ylabel. Для заголовка фигуры используйте fig.suptitle('title', fontsize=16), а для меток осей – plt.xlabel('xlabel', fontsize=14) и plt.ylabel('ylabel', fontsize=14) с разными значениями размера шрифта для каждого элемента. Такой подход позволяет настроить каждый текстовый элемент независимо, не затрагивая глобальные настройки шрифта.
Содержание
- Установка отдельных размеров шрифта
- Объектно‑ориентированный подход
- Расширенная настройка шрифта
- Глобальные и индивидуальные настройки
- Практические примеры
- Лучшие практики
Установка отдельных размеров шрифта
Базовый метод с отдельными параметрами
Самый простой способ задать отдельные размеры шрифта – использовать параметр fontsize напрямую в функциях заголовка и меток осей. Это даёт тонкий контроль над каждым текстовым элементом:
from matplotlib import pyplot as plt
fig = plt.figure()
plt.plot([1, 2, 3, 4, 5], [10, 20, 15, 25, 30])
# Установить заголовок фигуры с конкретным размером шрифта
fig.suptitle('Figure Main Title', fontsize=20, fontweight='bold')
# Установить метки осей с разными размерами шрифта
plt.xlabel('X-Axis Label', fontsize=14)
plt.ylabel('Y-Axis Label', fontsize=16)
plt.show()
В этом примере заголовок фигуры использует размер 20, метка оси X – 14, а метка оси Y – 16. Согласно статье на GeeksforGeeks, этот метод позволяет указать разные размеры шрифта для каждого текстового элемента независимо.
Установка размеров шрифта после создания
Вы также можете задать размеры шрифта после создания фигуры, используя метод .set_fontsize() у объектов текста:
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot([1, 2, 3, 4, 5], [10, 20, 15, 25, 30])
# Добавить заголовки и метки
fig.suptitle('Main Title')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
# Установить размеры шрифта индивидуально
fig.suptitle('Main Title').set_fontsize(24)
ax.set_title('Subplot Title').set_fontsize(18)
ax.xaxis.label.set_fontsize(14)
ax.yaxis.label.set_fontsize(16)
plt.show()
Этот подход обеспечивает большую гибкость, так как позволяет изменить размеры шрифта даже после первоначального создания элементов графика.
Объектно‑ориентированный подход
Использование объектов Axes для лучшего контроля
При работе с несколькими подграфиками или сложными фигурами объектно‑ориентированный подход обеспечивает лучший контроль над отдельными элементами:
import matplotlib.pyplot as plt
import numpy as np
# Создать фигуру с несколькими подграфиками
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
# Сгенерировать данные
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# Построить данные
ax1.plot(x, y1)
ax2.plot(x, y2)
# Установить отдельные размеры шрифта для каждого подграфика
ax1.set_title('Sine Wave', fontsize=16)
ax2.set_title('Cosine Wave', fontsize=16)
ax1.set_xlabel('Time (s)', fontsize=12)
ax2.set_xlabel('Time (s)', fontsize=12)
ax1.set_ylabel('Amplitude', fontsize=14)
ax2.set_ylabel('Amplitude', fontsize=14)
# Установить заголовок фигуры с другим размером шрифта
fig.suptitle('Trigonometric Functions', fontsize=20, fontweight='bold')
plt.tight_layout()
plt.show()
Согласно статье на Towards Data Science, этот подход особенно полезен, когда нужно задать разные размеры шрифта для различных элементов в сложных графиках с несколькими подграфиками.
Установка размеров шрифта меток делений
Вы также можете настроить размеры шрифта меток делений отдельно:
fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4, 5], [10, 20, 15, 25, 30])
# Установить основной заголовок и метки
ax.set_title('Data Plot', fontsize=18)
ax.set_xlabel('X Values', fontsize=14)
ax.set_ylabel('Y Values', fontsize=16)
# Установить размеры шрифта меток делений
ax.tick_params(axis='x', which='major', labelsize=12)
ax.tick_params(axis='y', which='major', labelsize=12)
# Альтернативный метод с использованием get_xticklabels()
for label in ax.get_xticklabels():
label.set_fontsize(12)
for label in ax.get_yticklabels():
label.set_fontsize(12)
plt.show()
Это даёт полный контроль над размерами шрифта всех текстовых элементов вашего графика.
Расширенная настройка шрифта
Множественные свойства шрифта
Matplotlib позволяет настроить различные свойства шрифта, помимо размера, включая семейство шрифта, жирность и стиль:
fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4, 5], [10, 20, 15, 25, 30])
# Установить заголовок фигуры с несколькими свойствами шрифта
fig.suptitle('Main Figure Title',
fontsize=22,
fontweight='bold',
fontfamily='serif',
style='italic')
# Установить метки осей с разными свойствами
ax.set_xlabel('X-Axis', fontsize=14, fontweight='normal', fontfamily='sans-serif')
ax.set_ylabel('Y-Axis', fontsize=16, fontweight='bold', fontfamily='monospace')
# Установить заголовок подграфика
ax.set_title('Subplot Title', fontsize=18, color='blue')
plt.show()
Как показано на сайте CodeRivers, вы можете комбинировать несколько свойств шрифта, чтобы достичь точного визуального вида, который вам нужен.
Позиционирование и выравнивание
Вы также можете управлять позиционированием и выравниванием заголовков и меток:
fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4, 5], [10, 20, 15, 25, 30])
# Установить заголовок фигуры с позиционированием
fig.suptitle('Figure Title',
fontsize=24,
x=0.5, # позиция по оси X (0=лево, 0.5=центр, 1=право)
y=1.05, # позиция по оси Y (1=верх, 0.5=центр, 0=низ)
horizontalalignment='center',
verticalalignment='top')
# Установить метки осей с позиционированием
ax.set_xlabel('X Label', fontsize=14, ha='right') # горизонтальное выравнивание
ax.set_ylabel('Y Label', fontsize=16, va='top') # вертикальное выравнивание
plt.show()
Такой уровень контроля особенно полезен при создании фигур публикационного качества с точным позиционированием текста.
Глобальные и индивидуальные настройки
Когда использовать глобальные настройки
Хотя вам нужны индивидуальные размеры шрифта для конкретного случая, важно понять, когда глобальные настройки могут быть подходящими:
# Установить глобальные размеры шрифта
plt.rcParams['axes.titlesize'] = 16 # Заголовки подграфиков
plt.rcParams['figure.titlesize'] = 20 # Заголовки фигур
plt.rcParams['axes.labelsize'] = 14 # Метки осей
plt.rcParams['xtick.labelsize'] = 12 # Метки делений оси X
plt.rcParams['ytick.labelsize'] = 12 # Метки делений оси Y
# Создать фигуру
fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4, 5], [10, 20, 15, 25, 30])
# Эти элементы будут использовать глобальные настройки
ax.set_title('Global Title')
ax.set_xlabel('Global X Label')
ax.set_ylabel('Global Y Label')
# При необходимости переопределить индивидуальные настройки
ax.set_title('Custom Title', fontsize=18) # Переопределить глобальную настройку
plt.show()
Согласно статье на SQLPeY, глобальные настройки полезны, когда нужно обеспечить согласованный стиль во множестве графиков проекта, но их можно переопределять при необходимости.
Смешанный подход с глобальными и индивидуальными настройками
Вы можете комбинировать глобальные настройки с индивидуальными переопределениями, чтобы сохранить согласованность и при этом позволить исключения:
# Установить некоторые глобальные значения по умолчанию
plt.rcParams['axes.labelsize'] = 12
plt.rcParams['figure.titlesize'] = 18
# Создать фигуру
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot([1, 2, 3, 4, 5], [10, 20, 15, 25, 30])
# Использовать глобальные настройки для большинства элементов
fig.suptitle('Main Title') # Использует глобальный figure.titlesize = 18
ax.set_xlabel('X Label') # Использует глобальный axes.labelsize = 12
ax.set_ylabel('Y Label') # Использует глобальный axes.labelsize = 12
# Переопределить конкретные элементы
ax.set_title('Custom Title', fontsize=16) # Переопределить глобальную настройку
plt.show()
Такой подход обеспечивает как согласованность, так и гибкость в вашем рабочем процессе построения графиков.
Практические примеры
Научный график
Ниже приведён практический пример для научного графика с разными размерами шрифта для каждого элемента:
import matplotlib.pyplot as plt
import numpy as np
# Сгенерировать примерные данные
x = np.linspace(0, 10, 100)
y = np.exp(-0.1 * x) * np.cos(2 * np.pi * x)
# Создать фигуру
fig, ax = plt.subplots(figsize=(10, 6))
# Построить данные
ax.plot(x, y, 'b-', linewidth=2, label='Decaying Oscillation')
ax.fill_between(x, 0, y, alpha=0.3, color='blue')
# Установить индивидуальные размеры шрифта
fig.suptitle('Decaying Oscillation Analysis', fontsize=20, fontweight='bold')
ax.set_title('Experimental Data vs Model Prediction', fontsize=16)
ax.set_xlabel('Time (seconds)', fontsize=14)
ax.set_ylabel('Amplitude (units)', fontsize=14)
ax.legend(fontsize=12)
# Установить размеры шрифта меток делений
ax.tick_params(axis='both', which='major', labelsize=12)
# Добавить сетку
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
Этот пример демонстрирует, как создать профессиональный научный график с тщательно подобранными размерами шрифта для разных текстовых элементов.
Многоподграфический пример
Для фигур с несколькими подграфиками вы можете задать разные размеры шрифта для каждого подграфика:
import matplotlib.pyplot as plt
import numpy as np
# Создать фигуру с подграфиками
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
fig.suptitle('Multi‑plot Analysis', fontsize=22, fontweight='bold')
# Сгенерировать данные
x = np.linspace(0, 10, 100)
axes[0,0].plot(x, np.sin(x), 'r-')
axes[0,1].plot(x, np.cos(x), 'g-')
axes[1,0].plot(x, np.exp(-0.1*x), 'b-')
axes[1,1].plot(x, x**2, 'm-')
# Установить заголовки подграфиков и метки с разными размерами шрифта
axes[0,0].set_title('Sine Function', fontsize=16)
axes[0,1].set_title('Cosine Function', fontsize=16)
axes[1,0].set_title('Exponential Decay', fontsize=16)
axes[1,1].set_title('Quadratic Function', fontsize=16)
axes[0,0].set_xlabel('x', fontsize=12)
axes[0,1].set_xlabel('x', fontsize=12)
axes[1,0].set_xlabel('x', fontsize=12)
axes[1,1].set_xlabel('x', fontsize=12)
axes[0,0].set_ylabel('sin(x)', fontsize=14)
axes[0,1].set_ylabel('cos(x)', fontsize=14)
axes[1,0].set_ylabel('e^(-0.1x)', fontsize=14)
axes[1,1].set_ylabel('x²', fontsize=14)
# Установить размеры шрифта меток делений для всех подграфиков
for ax in axes.flat:
ax.tick_params(axis='both', which='major', labelsize=10)
plt.tight_layout()
plt.show()
Лучшие практики
Иерархия размеров шрифта
Для профессионального вида графиков следуйте иерархии размеров шрифта:
Заголовок фигуры (suptitle): 18–24 pt
Заголовки подграфиков: 14–18 pt
Метки осей: 12–16 pt
Метки делений: 10–12 pt
Легенда: 10–12 pt
Эта визуальная иерархия помогает читателю понять важность различных текстовых элементов графика.
Учитывайте читаемость
- Обеспечьте достаточный контраст между текстом и фоном.
- Используйте подходящие семейства шрифтов (serif для основного текста, sans‑serif для меток).
- Избегайте чрезмерно больших размеров шрифта, которые делают график перегруженным.
- Сохраняйте согласованный стиль внутри одного графика.
Распространённые ошибки
- Использование глобальных настроек, когда нужен индивидуальный контроль – как упомянуто выше, глобальные настройки не подходят, когда необходимо задать разные размеры шрифта для каждого элемента.
- Несогласованные размеры шрифта – убедитесь, что размеры шрифта следуют логической иерархии и не конфликтуют друг с другом.
- Пренебрежение позиционированием текста – иногда индивидуальные размеры шрифта могут вызвать наложение текста, поэтому обращайте внимание на позиционирование.
- Забывание о
tight_layout()– эта функция помогает предотвратить наложение текста и обеспечивает правильное размещение элементов.
Следуя этим рекомендациям и использовав описанные методы, вы сможете создавать профессиональные графики Matplotlib с точно контролируемыми размерами шрифта для каждого текстового элемента.
Источники
- Change Font Size in Matplotlib – GeeksforGeeks
- How to change the font size of the Title in a Matplotlib figure – GeeksforGeeks
- How to Change the Font Size in Matplotlib Plots | Towards Data Science
- How to change the size of axis labels in Matplotlib? – GeeksforGeeks
- How To Change Matplotlib Title Font Size In Python – PythonGuides
- Mastering Matplotlib Font Settings: A Comprehensive Guide – CodeRivers
- Matplotlib.pyplot.suptitle() function in Python – GeeksforGeeks
- How To Change Matplotlib Figure Title Font Size in Python – PythonGuides
- Solved: How to Set Font Sizes for Figure Titles and Axes Labels in Matplotlib
Заключение
Установка отдельных размеров шрифта для заголовков фигур и меток осей в Matplotlib проста с использованием параметра fontsize в соответствующих функциях. Вы можете использовать fig.suptitle('title', fontsize=20) для заголовка фигуры, plt.xlabel('xlabel', fontsize=14) для метки оси X и plt.ylabel('ylabel', fontsize=16) для метки оси Y. Для более сложных графиков с несколькими подграфиками объектно‑ориентированный подход с объектами Axes обеспечивает лучший контроль над отдельными элементами.
Ключевые методы включают:
- Использование параметра
fontsizeнапрямую в функциях заголовка/меток - Установка размеров шрифта после создания с помощью метода
.set_fontsize() - Использование объектов Axes для многоподграфочных сценариев
- Комбинирование свойств шрифта, таких как жирность, семейство и стиль
Для достижения наилучших результатов следуйте иерархии размеров шрифта и обеспечьте правильное позиционирование текста, чтобы избежать наложения. Хотя глобальные настройки полезны для согласованного стиля, индивидуальные параметры дают точный контроль, необходимый для конкретных требований к настройке.