# Настройка расположения легенд Seaborn, меток, текста и т.д.

Seaborn — это библиотека Python, позволяющая создавать статистические визуализации. В основе она использует Matplotlib и имеет значительную интеграцию с библиотекой анализа данных Pandas. Легенда в Seaborn — это поле, которое предоставляет описания различных атрибутов графика, включая информацию о том, какие цвета соответствуют каким атрибутам.

В этом руководстве **вы научитесь создавать и настраивать легенды в Seaborn, включая их позиционирование, размер, подписи и заголовок**. Поскольку Seaborn использует Matplotlib в своей основе, у вас есть много возможностей для настройки легенды.

К концу этого урока вы научитесь следующему:

* Как добавить или скрыть легенду в Seaborn
* Как переместить легенду в Сиборне в разные позиции, в том числе и снаружи
* Как изменить название и метки в легенде Seaborn
* Как изменить **размер шрифта** заголовков и надписей легенд
* Как настроить дополнительные свойства, включая добавление тени к легенде

Оглавление

* [Как можно настроить легенды в Seaborn](#kak-mozhno-nastroit-legendy-v-seaborn)
* [Как переместить локацию легенды в Seaborn](#kak-peremestit-lokaciyu-legendy-v-seaborn)
* [Как переместить легенду наружу в Seaborn](#kak-peremestit-legendu-naruzhu-v-seaborn)
* [Как удалить легенду в Seaborn](#kak-udalit-legendu-v-seaborn)
* [Как изменить метки легенд в Seaborn](#kak-izmenit-metki-legend-v-seaborn)
* [Как добавить название к легенде в Seaborn](#kak-dobavit-nazvanie-k-legende-v-seaborn)
* [Как изменить размер шрифта в легенде в Seaborn](#kak-izmenit-razmer-shrifta-v-legende-v-seaborn)
* [Как убрать границу с легенды в Seaborn](#kak-ubrat-granicu-s-legendy-v-seaborn)
* [Как изменить столбцы в легенде в Seaborn](#kak-izmenit-stolbcy-v-legende-v-seaborn)
* [Как изменить положение маркера в легенде в Seaborn](#kak-izmenit-polozhenie-markera-v-legende-v-seaborn)
* [Как добавить тень к легенде в Seaborn](#kak-dobavit-ten-k-legende-v-seaborn)
* [Часто задаваемые вопросы](#chasto-zadavaemye-voprosy)
* [Заключение](#zaklyuchenie)
* [Дополнительные ресурсы](#dopolnitelnye-resursy)

### Как можно настроить легенды в Seaborn

Чтобы настроить легенды в Seaborn, вы можете использовать функцию .legend(), доступную в Matplotlib pyplot. В общем случае, вызов функции выглядит следующим образом:

```python
import seaborn as sns
import matplotlib.pyplot as plt

...

plt.legend()
```

Когда вы вызываете функцию, вы можете передать различные параметры, которые позволяют настроить легенду. Давайте сначала рассмотрим, как изменить расположение легенды.

### Как переместить локацию легенды в Seaborn

Чтобы переместить расположение легенды в Seaborn, используйте аргумент `loc=` в функции plt.legend(). Аргумент принимает как **именованное расположение, так и пронумерованное расположение**. В таблице ниже представлены различные доступные расположения, как именованные, так и пронумерованные:

| Строка местоположения | Код местоположения |
| --------------------- | ------------------ |
| `'best'`              | 0                  |
| `'upper right'`       | 1                  |
| `'upper left'`        | 2                  |
| ‘`lower left'`        | 3                  |
| `'lower right'`       | 4                  |
| `'right'`             | 5                  |
| `'center left'`       | 6                  |
| `'center right'`      | 7                  |
| `'lower center'`      | 8                  |
| `'upper center'`      | 9                  |
| `'center'`            | 10                 |

Давайте начнем с именованных местоположений, так как они более интуитивны. По умолчанию Seaborn будет использовать расположение `'best'` или `0`. Оно определит лучшее место для легенды в зависимости от того, где находятся точки данных на графике.

```python
# Перемещение легенды Seaborn с использованием именованных местоположений

import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.scatterplot(data=df, x='total_bill', y='tip', hue='day')
plt.legend(loc='upper center')
plt.show()
```

В приведенном ниже примере мы загрузили набор данных `'tips'`, доступный в библиотеке Seaborn, и создали диаграмму рассеяния Seaborn с этими данными. Затем мы использовали функцию `plt.legend()` и передали в нее `'upper center'` в параметр `loc=`. Это вернуло следующую визуализацию:

<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2FUWW17oP8k2QIlmyhcwrg%2F01-Change-Legend-Position-in-Seaborn-Using-Named-Positions.png?alt=media&#x26;token=62bbd6d9-6b2b-4c7c-83cb-c11aa3bf8391" alt=""><figcaption><p>Измените положение легенды в Seaborn, используя именованные позиции.</p></figcaption></figure>

Мы видим, что расположение легенды изменилось на верхнее среднее положение. Аналогично использованию именованных позиций, мы также можем использовать пронумерованные позиции. Давайте посмотрим, как это работает.

{% tabs %}
{% tab title="Код" %}
```python
# Перемещение легенды Seaborn с использованием номеров позиций

import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.scatterplot(data=df, x='total_bill', y='tip', hue='day')
plt.legend(loc=1)
plt.show()
```
{% endtab %}

{% tab title="Результат" %}
<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2FtRN13MRTeL4l4etJCH9F%2F02-Change-Legend-Position-in-Seaborn-Using-Numbered-Positions.png?alt=media&#x26;token=649b2d95-815b-4006-a004-9cac1fd40fb4" alt=""><figcaption><p>Изменение положения легенды в Seaborn с использованием числовых позиций</p></figcaption></figure>
{% endtab %}
{% endtabs %}

Мы видим, что при передаче значения `1` для параметра расположения, место размещения легенды переместилось в правый верхний угол. Также видно, что легенда теперь закрывает одну из точек данных. Поэтому необходимо учитывать, где размещать легенду.

### Как переместить легенду наружу в Seaborn

Чтобы переместить легенду за пределы графика в Seaborn, вы можете использовать параметры loc= и bbox\_to\_anchor=. Параметр bbox\_to\_anchor позволяет указать, где именно должна быть размещена легенда относительно самого графика.

Давайте рассмотрим пример того, как это работает:

{% tabs %}
{% tab title="Код" %}
```python
# Перемещение легенды Seaborn за пределы области рисунка

import seaborn as sns 
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.scatterplot(data=df, x='total_bill', y='tip', hue='day')
plt.legend(loc='upper left', bbox_to_anchor=(1, 1))
plt.show()
```
{% endtab %}

{% tab title="Результат" %}
<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2FMmgwFgdDPsTRYJG7ywYP%2F03-Move-Legend-Outside-of-Plot-in-Seaborn.png?alt=media&#x26;token=00e12d27-359d-41bc-8e6b-50fe19c87091" alt=""><figcaption><p>Переместите легенду за пределы графика в Seaborn</p></figcaption></figure>
{% endtab %}
{% endtabs %}

**Но как это работает?** Когда вы используете оба параметра `loc=` и `bbox_to_anchor=`, параметр `loc=` указывает, где должна быть привязана легенда. В этом случае, указывая верхний левый угол, легенда привязывается к верхней левой точке. Затем, передавая кортеж из `(1, 1)`, местоположение изменяется так, что ограничивающая рамка (верхний левый угол легенды) находится в верхнем правом углу самого графика.

Чтобы разместить легенду в левом верхнем углу за пределами графика в Seaborn, вы можете использовать следующий код:

{% tabs %}
{% tab title="Код" %}
```python
# Перемещение легенды Seaborn за пределы области рисунка

import seaborn as sns 
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.scatterplot(data=df, x='total_bill', y='tip', hue='day')
plt.legend(loc='lower left', bbox_to_anchor=(0, 1))
plt.show()
```
{% endtab %}

{% tab title="Результат" %}
<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2Fi3EqsiDDNplYpXIYrr94%2F03-Move-Legend-Outside-of-Plot-in-Seaborn-to-the-Top-Left.png?alt=media&#x26;token=ec3e780c-d942-4135-bbe7-174f9b166261" alt=""><figcaption><p>Переместите легенду за пределы графика в Seaborn в левый верхний угол.</p></figcaption></figure>
{% endtab %}
{% endtabs %}

Мы видим, что для привязки местоположения мы используем `'нижний левый'`. Это означает, что любое местоположение легенды, которое мы передаем в параметр `bbox_to_anchor=`, будет использовать нижний левый угол в качестве привязки. Передавая кортеж `(0, 1)`, мы указываем Seaborn, что хотим, чтобы позиция была привязана к крайней левой части (x = 0) графика и находилась в верхней части графика (y =1).

В следующем разделе вы узнаете, как полностью удалить легенду

### Как удалить легенду в Seaborn

Чтобы удалить легенду в Seaborn, мы можем передать аргумент `legend=False` в саму функцию построения графика. В этом случае нам не нужно использовать функцию `plt.legend()`. Этот параметр доступен в различных функциях построения графиков в Seaborn. Посмотрим, как это выглядит:

{% tabs %}
{% tab title="Код" %}
```python
# Удаление легенды из визуализации Seaborn

import seaborn as sns 
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.scatterplot(data=df, x='total_bill', y='tip', hue='day', legend=False)
plt.show()
```
{% endtab %}

{% tab title="Результат" %}
<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2FDOsanfdNkXbzOnRfw1Xb%2F04-Remove-a-Legend-in-Seaborn-Plot.png?alt=media&#x26;token=57977f3b-77d8-474e-8f23-632b4b3018ec" alt=""><figcaption><p>Удаление легенды в графике</p></figcaption></figure>
{% endtab %}
{% endtabs %}

Выполнив этот код, мы удаляем легенду из нашего графика Seaborn.

В следующем разделе вы узнаете, как изменить подписи легенды в Seaborn.

### Как изменить метки легенд в Seaborn

Чтобы изменить подписи легенды в графике Seaborn, используйте параметр `labels=` в функции `plt.legend()`. Это позволяет передать список значений, которые будут представлять различные подписи для легенды.

В нашем примере на графике легенда показывает дни в сокращённом виде. Возможно, мы захотим развернуть их до полного названия. Для этого мы можем передать `labels=['Thursday', 'Friday', 'Saturday', 'Sunday']` в функцию `plt.legend()` .

{% tabs %}
{% tab title="Код" %}
```python
# Изменение меток легенды Seaborn

import seaborn as sns 
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.scatterplot(data=df, x='total_bill', y='tip', hue='day')
plt.legend(labels=['Thursday', 'Friday', 'Saturday', 'Sunday'])
plt.show()
```
{% endtab %}

{% tab title="Результат" %}
<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2FLuSPdwJoRbGssiKJjzVV%2F05-Change-Legend-Labels-in-Seaborn-Plots.png?alt=media&#x26;token=065be9b9-a6d3-4506-9840-0827e60c99dd" alt=""><figcaption><p>Изменение ярлыков легенд в графиках Seaborn</p></figcaption></figure>
{% endtab %}
{% endtabs %}

В следующем разделе вы узнаете, как добавить заголовок к легенде в Seaborn.

### Как добавить название к легенде в Seaborn

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

Для добавления заголовка к легенде графика Seaborn, можно использовать параметр `title=` в функции `plt.legend()`. Этот параметр принимает строку, что позволяет настроить заголовок. Давайте посмотрим, как это выглядит:

{% tabs %}
{% tab title="Код" %}
```python
# Добавление заголовка легенды Seaborn

import seaborn as sns 
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.scatterplot(data=df, x='total_bill', y='tip', hue='day')
plt.legend(title='Day of Week')
plt.show()
```
{% endtab %}

{% tab title="Результат" %}
<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2FbOyKzou10TYQuwHHsdiK%2F06-Add-Title-to-Legend-in-Seaborn-Plot.png?alt=media&#x26;token=4f9ae66a-7895-4f17-a7b4-870241197a7d" alt=""><figcaption><p>Добавьте заголовок к легенде в графике</p></figcaption></figure>
{% endtab %}
{% endtabs %}

В приведенном выше коде мы указали заголовок `'Day of Week'` для нашей легенды. Давайте посмотрим, как это выглядит в Seaborn:

Мы также можем изменить размер шрифта в легенде Seaborn – это вы узнаете в следующем разделе.

### Как изменить размер шрифта в легенде в Seaborn

В этом разделе вы узнаете, как изменить размер шрифта в легенде Seaborn. Это можно сделать двумя разными способами:

1. `fontsize=` управляет размером текста в легенде
2. `title_fontsize=` управляет размером шрифта заголовка в легенде.

Seaborn позволяет использовать либо именованные размеры, как показано в примере ниже, либо фактические размеры в виде чисел, обозначающих размер шрифта в пикселях.

Посмотрим, как можно настроить размер шрифта в легенде

{% tabs %}
{% tab title="Код" %}
```python
# Изменение размера шрифта текста в легенде Seaborn

import seaborn as sns 
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.scatterplot(data=df, x='total_bill', y='tip', hue='day')
plt.legend(
    labels=['Четверг', 'Пятница', 'Суббота', 'Воскресенье'],
    fontsize='large',
    title='День недели',
    title_fontsize='x-large'
)
plt.show()
```
{% endtab %}

{% tab title="Результат" %}
<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2FHWOdFQG7yqmeqv957fGW%2F07-Change-Font-Size-in-Seaborn-Legends.png?alt=media&#x26;token=26bb3d33-40f7-488e-96f1-3e7252f45cdf" alt=""><figcaption><p>Изменение размера шрифта в легендах Seaborn</p></figcaption></figure>
{% endtab %}
{% endtabs %}

Видно, что изменены как размер заголовка легенды, так и сама легенда.

### Как убрать границу с легенды в Seaborn

Чтобы удалить границу из легенды в Seaborn, вы можете использовать аргумент `frameon=False`. Это указывает Seaborn убрать границу из легенды на графике. Это может быть полезно, если вы хотите сделать график более чистым и аккуратным.

Посмотрим, как выглядит этот код:

{% tabs %}
{% tab title="Код" %}
```python
# Удаление квадрата из легенды Seaborn

import seaborn as sns 
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.scatterplot(data=df, x='total_bill', y='tip', hue='day')
plt.legend(frameon=False)
plt.show()
```
{% endtab %}

{% tab title="Результат" %}
<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2FoQCdUagJCu46OKijXAyt%2F08-Remove-the-Border-of-a-Seaborn-Plot-Legend.png?alt=media&#x26;token=6da8feb9-d6ad-4d28-90bb-14a2467d634e" alt=""><figcaption><p>Удаление границы легенды графика Seaborn</p></figcaption></figure>
{% endtab %}
{% endtabs %}

Мы видим, что рамка легенды была удалена. В следующем разделе вы узнаете, как изменить и добавить столбцы в легенду в Seaborn.

### Как изменить столбцы в легенде в Seaborn

Добавление столбцов в легенду в Seaborn можно выполнить с помощью параметра `ncols=` в функции `plt.legend()`. Разбиение легенды на столбцы может быть отличным способом отображения легенды в горизонтальном формате.

Давайте посмотрим, как это выглядит на Python:

{% tabs %}
{% tab title="Код" %}
```python
# Добавление столбцов в легенде Seaborn

import seaborn as sns 
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.scatterplot(data=df, x='total_bill', y='tip', hue='day')
plt.legend(ncol=2)
plt.show()
```
{% endtab %}

{% tab title="Результат" %}
<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2F3Izb6VzrGzn0d9kWC4bj%2F09-Add-Columns-to-Seaborn-Legends.png?alt=media&#x26;token=e7138888-221c-449e-9329-3bbf3c383fc9" alt=""><figcaption><p>Добавление столбцов к легендам в Seaborn</p></figcaption></figure>
{% endtab %}
{% endtabs %}

В приведённом выше коде мы разделили легенду на два столбца. Это позволяет разместить два элемента в каждом столбце. Если бы мы передали 4, то элементы отображались бы в строке.

Мы видим, что, используя два столбца, элементы легенды разделены на столбцы.

### Как изменить положение маркера в легенде в Seaborn

В некоторых случаях вы можете захотеть разместить маркер справа от метки легенды. По умолчанию маркеры находятся слева. Чтобы сделать это, вы можете использовать параметр `markerfirst=` в функции `plt.legend()`. По умолчанию он установлен в `True`.

Давайте посмотрим, как использовать Seaborn, чтобы маркеры располагались справа от метки:

{% tabs %}
{% tab title="Код" %}
```python
# Перемещение маркеров вперед в легенде Seaborn

import seaborn as sns 
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.scatterplot(data=df, x='total_bill', y='tip', hue='day')
plt.legend(markerfirst=False)
plt.show()
```
{% endtab %}

{% tab title="Результат" %}
<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2FKTk72ixyp1YzbywsUnON%2F10-Move-Markers-to-the-Right-on-a-Seaborn-Legend.png?alt=media&#x26;token=2b5d493c-ce60-42b9-b676-f478e9bf76cf" alt=""><figcaption><p>Переместить маркеры вправо на легенде Seaborn</p></figcaption></figure>
{% endtab %}
{% endtabs %}

В разделе ниже вы узнаете, как добавить тень к легенде в Seaborn.

### Как добавить тень к легенде в Seaborn

Добавление тени к легенде может помочь добавить объем. Чтобы сделать это в Seaborn, вы можете использовать параметр `shadow=` в функции `plt.legend()`. Параметр принимает булевое значение и по умолчанию равен `False`.

Давайте посмотрим, как мы можем добавить тень к нашей легенде, передав `shadow=True` в наш граф

{% tabs %}
{% tab title="Код" %}
```python
# Добавление теневого эффекта в легенду Seaborn

import seaborn as sns 
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.scatterplot(data=df, x='total_bill', y='tip', hue='day')
plt.legend(shadow=True)
plt.show()
```
{% endtab %}

{% tab title="Результат" %}
<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2FTv2OV6j4D8LiOIXpbApi%2F11-Add-a-Shadow-to-a-Seaborn-Legend.png?alt=media&#x26;token=2abbdec1-8860-4490-9def-2b5e8ad50c61" alt=""><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

Добавив `shadow=True` в нашу функцию, мы видим, что к легенде добавлена тень.

### Часто задаваемые вопросы

<details>

<summary><strong>Как изменить расположение легенды на графике Seaborn?</strong></summary>

Вы можете изменить местоположение легенды в Seaborn, используя параметр `loc=` функции `plt.legend()`. Поскольку Seaborn использует Matplotlib, вы можете модифицировать легенды Seaborn с помощью функции `plt.legend().`

</details>

<details>

<summary><strong>Как переместить легенду за пределы графика в Seaborn?</strong></summary>

Чтобы переместить легенду за пределы графика Seaborn, можно использовать параметры loc и bbox\_to\_anchor функции `plt.legend()`. Например, чтобы переместить легенду за пределы графика в правый верхний угол, используйте следующий код: `plt.legend(loc='lower left', bbox_to_anchor=(0, 1))`

</details>

<details>

<summary><strong>Как добавить заголовок к легенде на графике Seaborn</strong></summary>

Чтобы добавить легенду к графику Seaborn, вы можете передать параметр title в функцию `plt.legend()`. Поскольку Seaborn использует Matplotlib, вы можете передать строку в этот параметр, и Seaborn добавит заголовок к легенде.

</details>

### Заключение

В этом уроке вы узнали, как добавлять и настраивать легенды в визуализациях данных Seaborn. Умение добавлять и настраивать легенды — это важный навык, который может значительно упростить понимание ваших визуализаций. Так как Seaborn использует Matplotlib в своей основе, вы можете в значительной степени настраивать свои визуализации.

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

### Дополнительные ресурсы

Чтобы узнать больше о связанных темах, воспользуйтесь следующими ресурсами:

* Как установить Seaborn в Python (Исправление: нет модуля с именем seaborn)
* Названия и метки осей Seaborn: добавление и настройка
* Seaborn despine: как работать с шипами и удалять их
