Изменить размер шрифта в 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()
Это приводит к: