6.3. Добавление легенды

Легенда - это помощник, позволяющий определить что соответствует определенному цвету линии или прямоугольника. Лучше пояснить на примере:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-3*np.pi, 3*np.pi, 200)
y1 = np.sin(x) - 2
y2 = np.cos(x) + 2
y3 = np.sinc(x)

fig, ax = plt.subplots()

ax.plot(x, y1, label = 'sin(x)')
ax.plot(x, y2, label = 'cos(x)')
ax.plot(x, y3, label = r'$\frac{sin(x)}{x}$')

ax.legend()

fig.set_figheight(5)
fig.set_figwidth(8)
plt.show()

Matplotlib legend

Легенда сделала график более информативным, хотя сама нуждается в некоторых улучшениях. Но сначала разберемся как она вообще у нас появилась. Во первых, мы добавили параметр label в каждом методе plot() - этот параметр содержит текст отображаемый в легенде. Во вторых мы добавили еще один метод legend, который собственно и помещает легенду на область Axes.

Позиционирование легенды можно установить с помощью параметра loc. по умолчанию этот параметр установлен в значение 'best', что соответствует наилучшему расположению, но это не всегда так. Иногда, положение необходимо установить вручную, для чего имеется еще 10 дополнительных параметров:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-3*np.pi, 3*np.pi, 200)
y1 = np.sin(x)
fig, axes = plt.subplots(5, 2)

location = ['upper right', 'upper left', 'lower left',
            'lower right', 'right', 'center left', 
            'center right', 'lower center', 'upper center', 'center']
i = 0

for ax in axes.ravel():
    ax.plot(x, y1, label = 'sin(x)')
    ax.legend(loc = location[i])
    ax.set_title(location[i])
    ax.set_xticks([])
    ax.set_yticks([])
    i += 1

fig.set_figheight(10)
fig.set_figwidth(10)
plt.show()

Matplotlib legend: позиционирование легенды

Параметр shadow устанавливает тень легенды и убирает ее прозрачность, а fontsize устанавливает размер шрифта:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-3*np.pi, 3*np.pi, 200)
y = np.sin(x)


fig, axes = plt.subplots(1, 2)

axes[0].plot(x, y, label = 'sin(x)')
axes[0].legend(shadow = True,
               fontsize = 15)
axes[0].set_title('shadow = True')

axes[1].plot(x, y, label = 'sin(x)')
axes[1].legend(shadow = False,
               fontsize = 15)
axes[1].set_title('shadow = False')

fig.set_figwidth(8)
fig.set_figheight(4)
plt.show()

Matplotlib legend: тень и прозрачность

На самом деле, мы практически не ограничены в настройке внешнего вида легенды:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-5, 5, 10)

y1 = 2*x + 5
y2 = -x + 8
y3 = 0.5*x + 5
y4 = np.full(10, 5)

fig, ax = plt.subplots()

ax.plot(x, y1, label = 'y = 2x + 5')
ax.plot(x, y2, label = 'y = -x + 8')
ax.plot(x, y3, label = 'y = 0.5x + 5')
ax.plot(x, y4, label = 'y = 5')

ax.legend(fontsize = 25,
          ncol = 2,    #  количество столбцов
          facecolor = 'oldlace',    #  цвет области
          edgecolor = 'r',    #  цвет крайней линии
          title = 'Прямые',    #  заголовок
          title_fontsize = '20'    #  размер шрифта заголовка
         )

fig.set_figwidth(12)
fig.set_figheight(12)

plt.show()

Matplotlib legend: настройка параметров отображения