Изменить размер шрифта в Matplotlib
Matplotlib - одна из наиболее широко используемых библиотек визуализации данных в Python. Большая часть популярности Matplotlib связана с его параметрами настройки - вы можете настроить практически любой элемент из его иерархии объектов.
В этом уроке мы рассмотрим, как изменить размер шрифта в Matplotlib.
Изменить размер шрифта в Matplotlib
Есть несколько способов изменить размер шрифтов в Matplotlib. Вы можете установить аргумент fontsize, изменить способ обработки шрифтов в Matplotlib в целом или даже изменить размер рисунка.
Давайте сначала создадим простой сюжет, на котором мы захотим изменить размер шрифтов:
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(figsize=(12, 6))
x = np.arange(0, 10, 0.1)
y = np.sin(x)
z = np.cos(x)
ax.plot(y, color='blue', label='Sine wave')
ax.plot(z, color='black', label='Cosine wave')
fig.suptitle('Sine and cosine waves')
plt.xlabel('Time')
plt.ylabel('Intensity')
leg = ax.legend()
plt.show()
Изменить размер шрифта с помощью fontsize
Попробуем самый простой вариант. Каждая функция, которая имеет дело с текстом, например suptitle(), xlabel() и все другие текстовые функции, принимают аргумент - fontsize.
Вернемся к предыдущему коду и укажем fontsize для этих элементов:
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(figsize=(12, 6))
x = np.arange(0, 10, 0.1)
y = np.sin(x)
z = np.cos(x)
ax.plot(y, color='blue', label='Sine wave')
ax.plot(z, color='black', label='Cosine wave')
fig.suptitle('Sine and cosine waves', fontsize=20)
plt.xlabel('Time', fontsize=16)
plt.ylabel('Intensity', fontsize=16)
leg = ax.legend()
plt.show()
Здесь мы установили fontsize для suptitle, а также меток времени и интенсивности. Запуск этого кода дает:
Мы также можем изменить размер шрифта в легенде, добавив аргумент prop и установив там размер шрифта:
leg = ax.legend(prop={"size":16})
Это изменит размер шрифта, который в этом случае также сдвинет легенду в нижний левый угол, чтобы она не перекрывалась с элементами в верхнем правом углу:
Однако, хотя мы можем установить каждый размер шрифта таким образом, если у нас много текстовых элементов, и мы просто хотим единообразного общего размера, этот подход повторяется.
В таких случаях мы можем перейти к установке размера шрифта глобально.
Изменить размер шрифта глобально
Есть два способа установить глобальный размер шрифта. Мы хотим установить для параметра font_size новый размер. Мы можем перейти к этому параметру через rcParams['font.size'].
Один из способов - изменить их напрямую:
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(figsize=(12, 6))
x = np.arange(0, 10, 0.1)
y = np.sin(x)
z = np.cos(x)
plt.rcParams['font.size'] = '16'
ax.plot(y, color='blue', label='Sine wave')
ax.plot(z, color='black', label='Cosine wave')
plt.xlabel('Time')
plt.ylabel('Intensity')
fig.suptitle('Sine and cosine waves')
leg = ax.legend()
plt.show()
Вы должны установить их перед вызовом функции plot(), так как если вы пытаетесь применить их в дальнейшем, никаких изменений не будет. Этот подход изменит все, что указано в качестве шрифта объектом kwargs font.
Однако, когда мы запускаем этот код, становится очевидным, что метки x и y, не изменились в размере:
В зависимости от версии Matplotlib, которую вы используете, вы не сможете изменить их с помощью параметров rc. Вы бы использовали axes.labelsize и xtick.labelsize / ytick.labelsize для них соответственно.
Если их установка не меняет размер меток, вы можете использовать функцию set(), передаваемую через fontsize, или использовать функцию set_fontsize():
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(figsize=(12, 6))
x = np.arange(0, 10, 0.1)
y = np.sin(x)
z = np.cos(x)
# Set general font size
plt.rcParams['font.size'] = '16'
# Set tick font size
for label in (ax.get_xticklabels() + ax.get_yticklabels()):
label.set_fontsize(16)
ax.plot(y, color='blue', label='Sine wave')
ax.plot(z, color='black', label='Cosine wave')
plt.xlabel('Time', fontsize=16)
plt.ylabel('Intensity', fontsize=16)
fig.suptitle('Sine and cosine waves')
leg = ax.legend()
plt.show()
Это приводит к: