Как изменить размер шрифта на графике matplotlib
Как изменить размер шрифта для всех элементов (меток, заголовка и т.д.) на графике, созданном с помощью matplotlib?
Я знаю, как изменить размер шрифта меток осей, это делается с помощью следующего кода:
import matplotlib
matplotlib.rc('xtick', labelsize=20)
matplotlib.rc('ytick', labelsize=20)
Но как изменить размер шрифта для остальных элементов?
5 ответ(ов)
Если вы такой же контрол-фрик, как и я, вам может понадобиться явно установить все размеры шрифтов в Matplotlib. Вот пример кода, который поможет вам это сделать:
import matplotlib.pyplot as plt
SMALL_SIZE = 8
MEDIUM_SIZE = 10
BIGGER_SIZE = 12
plt.rc('font', size=SMALL_SIZE) # управление размерами шрифта по умолчанию
plt.rc('axes', titlesize=SMALL_SIZE) # размер шрифта заголовка осей
plt.rc('axes', labelsize=MEDIUM_SIZE) # размер шрифта меток по оси x и y
plt.rc('xtick', labelsize=SMALL_SIZE) # размер шрифта меток по оси x
plt.rc('ytick', labelsize=SMALL_SIZE) # размер шрифта меток по оси y
plt.rc('legend', fontsize=SMALL_SIZE) # размер шрифта легенды
plt.rc('figure', titlesize=BIGGER_SIZE) # размер шрифта заголовка фигуры
Имейте в виду, что вы также можете установить размеры, вызывая метод rc
у модуля matplotlib
:
import matplotlib
SMALL_SIZE = 8
matplotlib.rc('font', size=SMALL_SIZE)
matplotlib.rc('axes', titlesize=SMALL_SIZE)
# и так далее ...
Таким образом, вы можете установить размеры шрифтов для всех элементов вашего графика, что позволяет добиться более точного оформления визуализации.
Если вам нужно изменить размер шрифта только для конкретного графика, который уже был создан, попробуйте следующий код:
import matplotlib.pyplot as plt
ax = plt.subplot(111, xlabel='x', ylabel='y', title='title')
for item in ([ax.title, ax.xaxis.label, ax.yaxis.label] +
ax.get_xticklabels() + ax.get_yticklabels()):
item.set_fontsize(20)
Этот код создает подграфик и изменяет размер шрифта для заголовка, меток осей и меток делений осей на 20 пунктов.
Вы можете изменить размер шрифта для всех графиков в Matplotlib с помощью следующей команды:
matplotlib.rcParams.update({'font.size': 22})
Эта строка кода обновляет параметры настройки Matplotlib, устанавливая размер шрифта на 22. Таким образом, все текстовые элементы графиков (например, заголовки, подписи осей, легенды и т.д.) будут отображаться с указанным размером шрифта. Если вам нужно применить этот параметр только к конкретному графику, вы можете использовать метод set_fontsize
для отдельных текстовых элементов.
Этот ответ предназначен для тех, кто пытается изменить шрифты во всем графике, включая легенду, а также для тех, кто хочет использовать разные шрифты и размеры для каждого элемента. В этой реализации не используется настройка rc (которая, как оказалось, не работает для меня). Метод может показаться немного сложным, но, лично для меня, это единственный способ, с которым я мог справиться.
Я разработал слегка отличающийся подход, который менее загроможден по сравнению с моим первоначальным ответом ниже. Он позволяет использовать любой шрифт на вашей системе, включая .otf
шрифты. Чтобы задать разные шрифты для каждого элемента, просто добавьте больше переменных font_path
и font_prop
.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
import matplotlib.ticker
# Обходные пути для ошибки с логарифмическими осями в Matplotlib 2.0.0
# https://github.com/matplotlib/matplotlib/issues/8017 :
# matplotlib.ticker._mathdefault = lambda x: '\\mathdefault{%s}'%x
# Задаем свойства шрифта (можно использовать больше переменных для различных шрифтов)
font_path = 'C:\\Windows\\Fonts\\AGaramondPro-Regular.otf'
font_prop = font_manager.FontProperties(fname=font_path, size=14)
ax = plt.subplot() # Определяет переменную ax, создавая пустой график
# Определяем данные для построения графика
x = np.linspace(0, 10)
y = x + np.random.normal(x)
plt.plot(x, y, 'b+', label='Точки данных')
for label in (ax.get_xticklabels() + ax.get_yticklabels()):
label.set_fontproperties(font_prop)
label.set_fontsize(13) # Размер здесь переопределяет font_prop
plt.title("Экспоненциально затухающие колебания", fontproperties=font_prop,
size=16, verticalalignment='bottom') # Размер здесь переопределяет font_prop
plt.xlabel("Время", fontproperties=font_prop)
plt.ylabel("Амплитуда", fontproperties=font_prop)
plt.text(0, 0, "Разный текст", fontproperties=font_prop)
lgd = plt.legend(loc='lower right', prop=font_prop) # Обратите внимание на другой аргумент 'prop' для легенды
lgd.set_title("Легенда", prop=font_prop)
plt.show()
Изначальный ответ
Этот ответ в основном объединяет ответ ryggyr здесь и другие ответы на SO.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
# Задаем шрифтовые словари (для заголовка графика и осей)
title_font = {'fontname':'Arial', 'size':'16', 'color':'black', 'weight':'normal',
'verticalalignment':'bottom'} # Нижнее вертикальное выравнивание для большего пространства
axis_font = {'fontname':'Arial', 'size':'14'}
# Задаем свойства шрифта (для использования в легенде)
font_path = 'C:\\Windows\\Fonts\\Arial.ttf'
font_prop = font_manager.FontProperties(fname=font_path, size=14)
ax = plt.subplot() # Определяет переменную ax, создавая пустой график
# Задаем шрифт для меток делений
for label in (ax.get_xticklabels() + ax.get_yticklabels()):
label.set_fontname('Arial')
label.set_fontsize(13)
x = np.linspace(0, 10)
y = x + np.random.normal(x) # Просто симулируем данные
plt.plot(x, y, 'b+', label='Точки данных')
plt.xlabel("Ось x", **axis_font)
plt.ylabel("Ось y", **axis_font)
plt.title("Разный график", **title_font)
plt.legend(loc='lower right', prop=font_prop, numpoints=1)
plt.text(0, 0, "Разный текст", **title_font)
plt.show()
Используя несколько шрифтовых словарей, вы можете выбрать разные шрифты/размеры/вес/цвета для различных заголовков, выбрать шрифт для меток делений и выбрать шрифт для легенды независимо.
Чтобы изменить размер меток на осях в графике, созданном с помощью Matplotlib, вы можете использовать метод tick_params()
. Например, для установки размера меток к 14, примените следующий код:
import matplotlib.pyplot as plt
# Ваш код для создания графика
plt.tick_params(labelsize=14) # Установка размера меток
plt.show()
Этот метод изменит размер шрифта меток на обоих осях, что поможет улучшить читаемость графика.
Как вынести легенду за пределы графика
Сохранить график в файл изображения вместо его отображения
Как сделать графики Matplotlib отображаемыми внутри IPython-ноутбука?
Как задать размер шрифта заголовка фигуры и меток осей?
Изменение частоты делений по оси X или Y