Повелеваем размерами в 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: