# Seaborn swarmplot: Bee Swarm Plots для распределения категориальных данных

Функция swarmplot в Seaborn позволяет создавать визуализации данных, которые легко и эффективно показывают числовое распределение данных по категориям. Существует множество функций для этого: boxplot и violin plot — это две из них, но они могут быть сложными для понимания нетехническими аудиториями.

Это то место, где график роя (или beeswarm plot) может быть очень полезен! На самом деле, график роя можно комбинировать с диаграммой размаха или виолончельным графиком для добавления дополнительных деталей. В этом руководстве вы узнаете, как использовать функцию swarmplot из Seaborn для создания диаграмм рассеяния роя, чтобы легко визуализировать числовые распределения по категориальным переменным.

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

* Как понять и использовать функцию Seaborn `sns.swarmplot()`
* Когда роевые диаграммы являются хорошей альтернативой простым диаграммам рассеяния, диаграммам ящиков и диаграммам скрипки
* Как настроить графики роя Сиборна, чтобы добавить больше деталей с помощью цвета и форм маркеров
* Как настроить метки, заголовки и многое другое

**Оглавление**

* [Что такое роевые графики и когда их следует использовать?](#chto-takoe-roevye-grafiki-i-kogda-ikh-sleduet-ispolzovat)
* [Понимание функции Seaborn swarmplot](#ponimanie-funkcii-seaborn-swarmplot)
* [Как создать роевой участок в Сиборне](#block-e903771a-50a2-4d4d-ac05-6b62808bbeee)
* [Как добавить цвет для дополнительных переменных на графиках Seaborn Swarm](#kak-dobavit-cvet-dlya-dopolnitelnykh-peremennykh-na-grafikakh-seaborn-swarm)
* [Как уклоняться от разных цветов на участках Seaborn Swarm](#kak-uklonyatsya-ot-raznykh-cvetov-na-uchastkakh-seaborn-swarm)
* [Как изменить прозрачность участков роя Seaborn](#kak-izmenit-prozrachnost-uchastkov-roya-seaborn)
* [Как добавить графики Swarm к графикам Seaborn Violin](#kak-dobavit-grafiki-swarm-k-grafikam-seaborn-violin)
* [Как изменить палитру сюжета Seaborn Swarm](#kak-izmenit-palitru-syuzheta-seaborn-swarm)
* [Как добавить заголовки и метки осей к графикам Seaborn Swarm](#kak-dobavit-zagolovki-i-metki-osei-k-grafikam-seaborn-swarm)
* [Заключение](#zaklyuchenie)
* [Дополнительные ресурсы](#dopolnitelnye-resursy)

### Что такое роевые графики и когда их следует использовать?

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

<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2FRkKhn6UtMVg9LVI7eWnh%2F01-Different-Categorical-Plots-Made-with-Seaborn-catplots-1024x847.png?alt=media&#x26;token=3a5b8024-27a0-4b76-9fe3-262dd6be5db6" alt=""><figcaption><p>Сравнение роевых диаграмм с различными визуализациями данных</p></figcaption></figure>

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

Узнать больше о вышеупомянутых графиках можно в моих ресурсах:

* Seaborn strip plots
* [Seaborn scatter plots](https://datagy.io/python-seaborn-scatterplot/)
* [Seaborn violin plots](https://datagy.io/seaborn-violinplot/)
* [Seaborn box and whisker plots](https://datagy.io/seaborn-boxplot/)

### Понимание функции Seaborn swarmplot

Функция `swarmplot()` в Seaborn предлагает множество параметров, которые позволяют значительно настраивать графики. На самом деле, параметров так много, что мы сосредоточимся в основном на тех, которые вы будете использовать чаще всего:

```python
seaborn.swarmplot(data=None, *, x=None, y=None, hue=None, order=None, hue_order=None,
dodge=False, orient=None, color=None, palette=None, size=5, edgecolor='gray', linewidth=0,
hue_norm=None, native_scale=False, formatter=None, legend='auto', warn_thresh=0.05,
ax=None, **kwargs)
```

Мы видим, что существует большое количество параметров. Давайте разберем важные параметры функции `swarmplot()` из библиотеки Seaborn. Мы будем использовать эти параметры на протяжении всего руководства:

* `data=` определяет данные, которые мы хотим использовать, такие как DataFrame библиотеки Pandas.
* `x=` и `y=` задают метки данных или столбцов, которые мы хотим использовать для оси x и оси y соответственно.
* `hue=` добавляет другое измерение к графику, используя разные цвета для различных переменных.
* `dodge=` позволяет разделить цвета в одной и той же категории на две разные группы
* `alpha=` позволяет вам изменить прозрачность точек. Обратите внимание, что это не является явным параметром функции, но может быть передано с использованием дополнительных аргументов ключевых слов функции scatterplot библиотеки Matplotlib.

Теперь, когда вы хорошо понимаете важные параметры функции swarmplot в Seaborn, давайте рассмотрим, как создать график с ее помощью.

### Как создать роевой участок в Seaborn <a href="#block-e903771a-50a2-4d4d-ac05-6b62808bbeee" id="block-e903771a-50a2-4d4d-ac05-6b62808bbeee"></a>

Так как Seaborn использует общую структуру для своих функций, создание диаграммы типа "рой" простое и интуитивно понятное. Мы можем просто передать DataFrame и метки столбцов в параметры `data=`, `x=`, и `y=` функции `sns.swarmplot()`. Давайте посмотрим, как можно создать простой график роя пчел в Seaborn:

```python
# Как создать seaborn Split Plot

import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('penguins')
sns.stripplot(data=df, x='island', y='bill_length_mm')
plt.show()
```

В коде выше мы передали наш DataFrame, `df`, в параметр `data=`. Аналогично, поскольку мы используем Pandas DataFrame, мы можем передавать метки столбцов как строки в соответствующие параметры оси x и оси y. Это возвращает следующее изображение:

<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2FvJcnWGF8RQzRMrZsM8iA%2F02-Creating-a-Simple-Seaborn-Swarm-Plot-1024x787.png?alt=media&#x26;token=39c3529b-f404-465d-ab0d-86771d1c2098" alt=""><figcaption><p>Создание простого графика Seaborn Swarm</p></figcaption></figure>

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

### Как добавить цвет для дополнительных переменных на графиках Seaborn Swarm

В созданном выше точечном графике мы отобразили информацию в двух измерениях. Мы можем добавить третий параметр на график, используя параметр `hue=`. Это добавит дополнительную колонку данных, разбивая переменную на разные цвета.

```python
# Как добавить еще одну переменную с цветом в seaborn Split Plot

import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('penguins')
sns.stripplot(data=df, x='island', y='bill_length_mm', hue='sex')
plt.show()
```

В коде выше мы добавили `hue='sex'`, что разделило значения в этом столбце на разные цвета. Это возвращает изображение ниже, где точки разделены на разные цвета.

<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2F8zQVhyS9sYJ0BcGar795%2F03-Adding-Another-Dimension-to-Seaborn-Swarm-Plots-with-hue-1024x787.png?alt=media&#x26;token=da673b70-ff4c-4c44-b25b-8465e7b9cb25" alt=""><figcaption><p>Добавление еще одного измерения к графикам Seaborn Swarm с помощью оттенка</p></figcaption></figure>

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

### Как уклоняться от разных цветов на участках Seaborn Swarm

По умолчанию точки на ленточном графике перекрываются в разных категориях. Это может затруднить восприятие кластеров значений. Чтобы решить эту проблему, мы можем разделить группы на отдельные кластеры. Таким образом, мы можем увидеть, сколько точек данных попадает в каждую подкатегорию. Для этого мы устанавливаем булев параметр `dodge=` в `True`.

```python
# Как изменить прозрачность seaborn Split Plot

import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('penguins')
sns.stripplot(data=df, x='island', y='bill_length_mm', hue='sex', alpha=0.35)
plt.show()
```

В кодовом блоке выше мы изменили параметр `dodge=` для разделения точек на соответствующие группы. Это привело к получению следующего изображения:

<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2FBty8A9YhFPTXzqwQaA7v%2F04-Dodging-Categories-of-Colors-in-Seaborn-Swarm-Plots-1024x787.png?alt=media&#x26;token=2da9638e-dd6b-4806-90d5-126c18453cf8" alt=""><figcaption><p>Уклонение от категорий цветов на графиках Seaborn Swarm</p></figcaption></figure>

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

### Как изменить прозрачность участков роя Seaborn

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

Посмотрим, как использовать параметр `alpha=` для изменения прозрачности. Аргумент принимает значение с плавающей запятой от 0.0 до 1.0, где меньшие значения обозначают более высокую прозрачность.

```python
# Как изменить прозрачность seaborn Strip Plot

import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('penguins')
sns.set_palette('Set2')
sns.swarmplot(data=df, x='island', y='bill_length_mm', alpha=0.35)
plt.show()
```

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

<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2FMBxINeprJ0yUkEGxzSBt%2F04-Modifying-Transparency-in-Seaborn-Swarm-Plots-1024x787.png?alt=media&#x26;token=7a16fe53-c6d6-4ef5-9217-3d81e059b1b1" alt=""><figcaption><p>Изменение прозрачности в графиках Seaborn Swarm</p></figcaption></figure>

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

### Как добавить графики Swarm к графикам Seaborn Violin

Мы можем объединить сварам-плот с виолончельным графиком Seaborn, чтобы помочь пользователям лучше понять виолончельный график. Seaborn упрощает это, просто вызывая обе функции. Seaborn затем добавит графики к тому же объекту осей. Посмотрим, как это выглядит:

```python
# Как наложить Strip Plot на Violin Plot в seaborn

import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('penguins')
sns.violinplot(data=df, x='island', y='bill_length_mm')
sns.stripplot(data=df, x='island', y='bill_length_mm', alpha=0.25, color='black')
plt.show()
```

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

<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2Ftd8bqbqxPiiQu6CXPaH7%2F05-Adding-Seaborn-Swarm-Plots-to-Violin-Plots-1024x787.png?alt=media&#x26;token=bc94bfc0-f80c-4791-9ef7-b6e3895985dc" alt=""><figcaption><p>Добавление участков Seaborn Swarm к участкам Violin</p></figcaption></figure>

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

### Как изменить палитру сюжета Seaborn Swarm

Seaborn позволяет легко изменить цветовую палитру вашего графика. Один из способов сделать это — вызвать функцию `sns.set_palette()` и передать в нее именованную палитру. Давайте посмотрим, как можно использовать палитру `'Set2'`, которая возвращает более мягкую, пастельную цветовую схему.

```python
# Как изменить палитру seaborn Strip Plot

import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('penguins')
sns.set_palette('Set2')
sns.stripplot(data=df, x='island', y='bill_length_mm', hue='sex', alpha=0.35)
plt.show()
```

При передаче палитры `'Set2'`, Seaborn создаёт следующий изображение нашего swarmplot.

<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2FTAMCR4GnmEIpMOLhqqJL%2F06-Changing-the-Palette-in-a-Seaborn-Swarm-Plot-1024x787.png?alt=media&#x26;token=8d58fc17-be81-4d46-8d0d-e8ae6dbdaa5f" alt=""><figcaption><p>Изменение палитры в сюжете Seaborn Swarm</p></figcaption></figure>

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

### Как добавить заголовки и метки осей к графикам Seaborn Swarm

По умолчанию Seaborn не добавляет заголовок, но использует метки столбцов в качестве меток для осей x и y. Мы можем изменить это, используя следующие методы для осей:

* `ax.set_title()`, чтобы задать заголовок
* `ax.set_xlabel()`, чтобы установить метку оси x
* Используйте `ax.set_ylabel()` для установки метки по оси Y.

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

```python
# Как добавить заголовок и метки осей к seaborn Strip Plot

import seaborn as sns
import matplotlib.pyplot as plt

df = sns.load_dataset('penguins')
sns.set_palette('Set2')
chart = sns.stripplot(data=df, x='island', y='bill_length_mm', hue='sex', alpha=0.35)
chart.set_title('Длина клюва по островам', fontdict={'size':18})
chart.set_xlabel('Длина клюва (мм)', fontdict={'weight':'bold'})
chart.set_ylabel('Остров', fontdict={'weight':'bold'})
plt.show()
```

Мы видим, что смогли добавить метку и настроить её с помощью параметра `fontdict=`. Этот параметр позволяет задавать настройки в соответствии с опциями стилизации текста

<figure><img src="https://3188902851-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ8ZgobqrSJWaGpehFarf%2Fuploads%2F8R1tzwP1TYUJ02x41LgS%2F07-Adding-Titles-and-Axis-Labels-to-Seaborn-Swarm-Plots-1024x837.png?alt=media&#x26;token=f42a2671-149c-482c-96a2-e1442edb9600" alt=""><figcaption><p>Добавление названий и меток осей к графикам Seaborn Swarm</p></figcaption></figure>

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

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

В этом уроке вы узнали, как создавать точечные графики с помощью функции `sns.swarmplot()` в библиотеке Seaborn. Точечные графики, или beeswarm-графики, представляют собой точечные диаграммы, отображающие непрерывные данные над категориальными данными. Они расширяют полосатые диаграммы, добавляя больше расстояния между данными.

Сначала вы узнали, как работают параметры функции и какие из них наиболее важны. Затем вы научились создавать простой диаграмму-рой и улучшать её, изменяя используемые цвета. После этого вы сделали график более четким, добавив разделение между цветами. Далее, вы наложили диаграмму-рой на диаграмму-скрипку, чтобы сделать её более понятной для нетехнических аудиторий. Наконец, вы узнали, как настраивать диаграммы, изменяя цветовую палитру и добавляя заголовки и подписи к осям на графике.

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

Чтобы узнать больше о связанных темах, ознакомьтесь с ресурсами ниже

* [Seaborn catplot – визуализация категориальных данных на Python](seaborn-catplot-vizualizaciya-kategorialnykh-dannykh-v-python)
* Seaborn Boxplot – Как создать диаграммы типа «ящик с усами»
* Seaborn Violin Plots in Python: полное руководство
* [Seaborn Countplot – Подсчет категориальных данных в Python](seaborn-countplot-podschet-kategorialnykh-dannykh-v-python)
* Seaborn Pointplot: Центральная Тенденция для Категориальных Данных
* [Seaborn stripplot: графики джиттера для распределений категориальных данных](seaborn-stripplot-jitter-plots-dlya-raspredelenii-kategorialnykh-dannykh)
* [Seaborn swarmplot(): Официальная документация](https://seaborn.pydata.org/generated/seaborn.swarmplot.html)
