August 25, 2021

Повелеваем размерами в Matplotlib

В этой статье я расскажу как тонко настроить размеры различных элементов на рисунках в библиотеке Matplotlib. Данной теме уделяют незаслуженно мало внимания, хотя это крайне важно для придания вашим графическим продуктам эстетически приятного вида.

Размеры рисунка

Об этом скажем в первую очередь, так как не настроив размер рисунка, все остальное уже теряет значение. Рассмотрим простой график:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
np.random.seed(0)

x = np.linspace(-6, 6, 10)
y = np.power(x,2)
plt.plot(x, y)

Хотелось бы растянуть его на размер всего полотна. Для этого можно воспользоваться аргументом figsize в функции plt.figure, в котором указываются ширина и высота в дюймах:

plt.figure(figsize=(20,10))
plt.plot(x, y)

При этом важно, чтобы задание размеров шло вначале:

Объектный интерфейс создания графиков имеет такой же параметр. Вид без него:

fig, ax = plt.subplots(2,1, sharex=True)
ax[0].plot(x, np.power(x,2))
ax[1].plot(x, np.power(x,3))
ax[0].set_title('График квадрата')
ax[1].set_title('График куба')
fig.suptitle('Два графика')

и с ним:

fig, ax = plt.subplots(2,1, sharex=True,figsize=(20,10) )
ax[0].plot(x, np.power(x,2))
ax[1].plot(x, np.power(x,3))
ax[0].set_title('График квадрата')
ax[1].set_title('График куба')
fig.suptitle('Два графика')

То же для графики с использованием методов Pandas:

df = pd.DataFrame(index=x, data={'y1':np.power(x, 2), 'y2':np.power(x,3)})
df.plot(subplots=True)
df.plot(subplots=True, figsize=(20,10))

Размеры рисок, легенд, подписей осей и заголовков

Теперь к разным надписям. Можно для всех штук задать размеры одним махом с помощью такого кода:

SMALL_SIZE = 14
MEDIUM_SIZE = 16
BIGGER_SIZE = 20

plt.rc('font', size=SMALL_SIZE)          
plt.rc('axes', titlesize=BIGGER_SIZE)    
plt.rc('axes', labelsize=MEDIUM_SIZE)    
plt.rc('xtick', labelsize=MEDIUM_SIZE)   
plt.rc('ytick', labelsize=MEDIUM_SIZE)   
plt.rc('legend', fontsize=MEDIUM_SIZE)   
plt.rc('figure', titlesize=BIGGER_SIZE)

Обратите внимание на размеры надписей к рискам:

А теперь на размеры заголовков:

И, наконец, на аналогичные изменения для функционального интерфейса работы с библиотекой Matplotlib: