Использование FacetGrid в Seaborn для визуализации данных по категориям

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

Импорт необходимых библиотек

import seaborn as sns
import matplotlib.pyplot as plt

Загрузка данных

FacetGrid работает с данными в формате pandas DataFrame. Для примера будем использовать встроенный набор данных tips из Seaborn.

# Загрузка данных
data = sns.load_dataset("tips")

Пример 1: Простая сетка графиков с FacetGrid

В этом примере мы создадим сетку подграфиков для визуализации распределения чаевых по дням недели и полам клиентов.

import seaborn as sns
import matplotlib.pyplot as plt

# Загрузка данных
data = sns.load_dataset("tips")

# Создание FacetGrid
g = sns.FacetGrid(data, col="day", row="sex", margin_titles=True)

# Построение графиков
g.map_dataframe(sns.scatterplot, x="total_bill", y="tip")

# Настройка заголовков и осей
g.set_axis_labels("Total Bill", "Tip")
g.set_titles(col_template="{col_name} Day", row_template="{row_name}")
g.tight_layout()

plt.show()

Результат: Сетка графиков, где каждый подграфик показывает разброс значений total_bill и tip для разных дней недели и полов клиентов.

Пример 2: Использование различных типов графиков

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

import seaborn as sns
import matplotlib.pyplot as plt

# Загрузка данных
data = sns.load_dataset("tips")

# Создание FacetGrid
g = sns.FacetGrid(data, col="day", row="sex", margin_titles=True)

# Построение графиков
g.map_dataframe(sns.histplot, x="tip", binwidth=2)

# Настройка заголовков и осей
g.set_axis_labels("Tip", "Frequency")
g.set_titles(col_template="{col_name} Day", row_template="{row_name}")
g.tight_layout()

plt.show()

Результат: Сетка гистограмм, каждая из которых показывает распределение чаевых по дням недели и полам клиентов.

Пример 3: Использование hue для дополнительной категоризации

В этом примере добавим дополнительную категорию hue для отображения разницы по типу обслуживания (обед или ужин).

import seaborn as sns
import matplotlib.pyplot as plt

# Загрузка данных
data = sns.load_dataset("tips")

# Создание FacetGrid
g = sns.FacetGrid(data, col="day", row="sex", margin_titles=True)

# Построение графиков
g.map_dataframe(sns.scatterplot, x="total_bill", y="tip", hue="time")

# Настройка заголовков и осей
g.set_axis_labels("Total Bill", "Tip")
g.set_titles(col_template="{col_name} Day", row_template="{row_name}")
g.add_legend()
g.tight_layout()

plt.show()

Результат: Сетка разбросов, где цвета точек отображают тип обслуживания (Lunch или Dinner), дополнительно разделенный по дням недели и полам клиентов.

Пример 4: Настройка внешнего вида графиков

Можно настроить внешние параметры графиков, такие как темы и стили, перед созданием FacetGrid.

import seaborn as sns
import matplotlib.pyplot as plt

# Загрузка данных
data = sns.load_dataset("tips")

# Настройка стиля
sns.set(style="whitegrid")

# Создание FacetGrid
g = sns.FacetGrid(data, col="day", row="sex", margin_titles=True)

# Построение графиков
g.map_dataframe(sns.scatterplot, x="total_bill", y="tip", hue="time")

# Настройка заголовков и осей
g.set_axis_labels("Total Bill", "Tip")
g.set_titles(col_template="{col_name} Day", row_template="{row_name}")
g.add_legend()
g.tight_layout()

plt.show()

Результат: Сетка разбросов с настроенным стилем фона, улучшенной читаемостью и визуальной привлекательностью.

Пример 5: Сложные сетки с FacetGrid

Если требуется сложная настройка с несколькими переменными, FacetGrid предоставляет гибкие возможности для их отображения.

import seaborn as sns
import matplotlib.pyplot as plt

# Загрузка данных
data = sns.load_dataset("tips")

# Создание FacetGrid с комплексной настройкой
g = sns.FacetGrid(data, col="day", row="time", hue="sex", margin_titles=True)

# Построение графиков
g.map_dataframe(sns.scatterplot, x="total_bill", y="tip")

# Настройка заголовков, осей и легенды
g.set_axis_labels("Total Bill", "Tip")
g.set_titles(col_template="{col_name} Day", row_template="{row_name}")
g.add_legend()
g.tight_layout()

plt.show()

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

Заключение

FacetGrid в Seaborn — мощный инструмент для визуализации данных по категориям и подгруппам. Он позволяет создавать сложные и многослойные графики, которые помогают лучше понять структуру и распределение данных в разных группах. Настройка заголовков, осей и легенд помогает сделать графики более информативными и визуально привлекательными.

Last updated