Добавить легенду к рисунку в Matplotlib
Matplotlib - одна из наиболее широко используемых библиотек визуализации данных в Python. Обычно при визуализации более чем одной переменной вы хотите добавить к графику легенду, объясняющую, что представляет каждая переменная.
В этой статье мы рассмотрим, как добавить легенду к графику Matplotlib.
Создание сюжета
Давайте сначала создадим простой график с двумя переменными:
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
x = np.arange(0, 10, 0.1)
y = np.sin(x)
z = np.cos(x)
ax.plot(y, color='blue')
ax.plot(z, color='black')
plt.show()
Здесь мы построили синусоидальную функцию, начиная от 0
до 10
с шагом 0.1
, а также косинусную функцию в том же интервале и шаге. Запуск этого кода дает:
Теперь было бы очень полезно пометить их и добавить легенду, чтобы тому, кто не писал этот код, было легче определить, что есть что.
Добавление легенды к фигуре в Matplotlib
Добавим легенду к этому сюжету. Во-первых, нам нужна переменная label
, чтобы мы могли ссылаться на эти метки в легенде. Тогда мы можем просто вызвать legend()
на объект ax
, чтобы добавить легенду:
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
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')
leg = ax.legend()
plt.show()
Теперь, если мы запустим код, на графике появится легенда:
Обратите внимание, как легенда была автоматически помещена в единственное свободное место, где волны не наезжают на нее.
Настроить легенду в 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')
leg = ax.legend(loc='upper right', frameon=False)
plt.show()
Это приводит к:
Здесь мы использовали аргумент loc
, чтобы указать, что мы хотим поместить легенду в правом верхнем углу. Другие параметры, которые принимаются: upper left
, lower left
, upper right
, lower right
, upper center
, lower center
, center left
и center right
.
Кроме того, вы можете использовать center
, чтобы поместить его в мертвую точку или best
, что-бы разместить легенду в «лучшем» свободном месте, чтобы она не перекрывалась ни с одним из других элементов. По умолчанию выбрано best
.
Добавить легенду за пределами граффика
Иногда бывает сложно поместить легенду в рамку графика. Возможно, здесь происходит много элементов, и все полотно заполнено важными данными.
В таких случаях вы можете разместить легенду за пределами осей и вдали от элементов, которые ее составляют. Это делается с помощью аргумента bbox_to_anchor
, который указывает, где мы хотим привязать легенду:
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')
leg = ax.legend(loc='center', bbox_to_anchor=(0.5, -0.10), shadow=False, ncol=2)
plt.show()
Это приводит к:
Аргумент bbox_to_anchor
принимает сам несколько аргументов. Во-первых, он принимает кортеж, который может содержать до 4 элементов. Здесь мы можем указать x
, y
, width
и height
легенды.
Мы можем установить только значение x
и y
, чтобы сместить его на -0.10
от верхнего края, и 0.5
от левого.
Настраивая их, вы можете установить легенду в любом месте. Внутри box
или за ее пределами.
Затем мы установили shadow
значение False
. Это используется, чтобы указать, хотим ли мы, чтобы небольшая тень отображалась под легендой или нет.
Наконец, мы установили аргументу ncol
значение 2
. Это определяет количество меток в столбце. Поскольку у нас есть две метки и мы хотим, чтобы они находились в одном столбце, мы установили для него значение 2
. Если бы мы изменили этот аргумент на 1
, они были бы размещены один над другим:
Вывод
В этом уроке мы рассмотрели, как добавить легенду к вашим графикам Matplotlib. Во-первых, мы позволили Matplotlib определить, где должна располагаться легенда, после чего мы использовали аргумент bbox_to_anchor
для указания нашего собственного местоположения за пределами осей.