Seaborn displot – Распределенческие графики в Python

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

Seaborn предоставляет специализированные функции для обоих этих видов визуализаций. Так почему же вы захотите использовать функцию displot()? Функция displot() в Seaborn является функцией на уровне фигур, а не на уровне осей. Это открывает разные возможности в том, как вы строите свои визуализации.

К концу этого учебного пособия вы узнаете следующее:

  • Что такое функция Seaborn displot()

  • Когда использовать функцию Seaborn displot() вместо специальных функций

  • Как построить несколько графиков с помощью функции уровня фигуры sns.displot()

  • Как настроить заголовки, цвета и многое другое

Оглавление

Понимание функции Seaborn displot()

Функция displot() библиотеки Seaborn используется для создания рисунков на уровне фигур на основе сетки FacetGrid Seaborn. Вы можете настроить тип визуализации, который будет создан, с помощью параметра kind=

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

Давайте посмотрим, как написана функция:

# Понимание функции seaborn.displot()
import seaborn as sns
sns.displot(data=None, *, x=None, y=None, hue=None, row=None, col=None, weights=None, kind='hist', rug=False, rug_kws=None, log_scale=None, legend=True, palette=None, hue_order=None, hue_norm=None, color=None, col_wrap=None, row_order=None, col_order=None, height=5, aspect=1, facet_kws=None, **kwargs)

Функция позволяет строить следующие типы визуализации, изменяемые параметром kind=

  • Гистограммы с функцией Seaborn histplot()

  • Графики оценки плотности ядра с помощью функции Seaborn kdeplot()

  • Графики эмпирической кумулятивной функции распределения с помощью функции Seaborn ecdfplot()

  • Ковры с функцией Seaborn rugplot()

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

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

  • data= предоставляет данные для построения с помощью объекта DataFrame библиотеки Pandas

  • x= и y= задают переменные для отображения на оси x и оси y соответственно

  • hue= добавляет дополнительную переменную для отображения через цветовое кодирование

Дополнительно, функция предлагает некоторые дополнительные параметры, доступные только в функции displot(). Давайте исследуем их:

  • kind= определяет тип создаваемой диаграммы. По умолчанию будет создана гистограмма, используя аргумент ключевого слова

  • row= позволяет вам разделить ваш набор данных на дополнительные строки визуализаций

  • col= позволяет вам разделить ваш набор данных на дополнительные столбцы визуализаций

  • height= и aspect= контролируют размер вашей визуализации данных

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

Загрузка образца набора данных

Чтобы следовать этому руководству, давайте используем набор данных, предоставленный библиотекой Seaborn. Мы воспользуемся популярным набором данных о чаевых, доступным через функцию sns.load_dataset()

Давайте посмотрим, как мы можем прочитать набор данных и изучить его первые пять строк:

# Исследование примера набора данных
import seaborn as sns
df = sns.load_dataset('tips')
print(df.head())

# Возвращает:
#    total_bill   tip     sex smoker  day    time  size
# 0       16.99  1.01  Female     No  Sun  Dinner     2
# 1       10.34  1.66    Male     No  Sun  Dinner     3
# 2       21.01  3.50    Male     No  Sun  Dinner     3
# 3       23.68  3.31    Male     No  Sun  Dinner     2
# 4       24.59  3.61  Female     No  Sun  Dinner     4

В нашем распоряжении имеется ряд переменных, включая как категориальные, так и непрерывные.

Создание базового графика с помощью Seaborn

По умолчанию функция displot() в Seaborn создает гистограмму. Для создания самой базовой визуализации мы можем просто передать следующие параметры:

  • data= для передачи в наш DataFrame

  • x= или y= для передачи меток столбцов, которые мы хотим изучить на гистограмме.

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

# По умолчанию Seaborn displot() покажет гистограмму
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.displot(data=df, x='tip')
plt.show()

В представленном выше блоке кода мы передали наш DataFrame df вместе с меткой столбца 'tip'. Это привело к следующей визуализации:

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

Создание графика оценки плотности ядра (Kernel Density Estimate) с помощью Seaborn displot

Хотя функция displot() в библиотеке Seaborn по умолчанию создает гистограммы, мы также можем создавать графики плотности распределения (KDE), используя параметр kind='kde'. Давайте посмотрим, как это выглядит:

# Используйте параметр kind= для изменения типа используемого графика
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.displot(data=df, x='tip', kind='kde')
plt.show()

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

Поскольку функция displot() на самом деле использует функцию kdeplot() в своей работе, поведение обеих функций одинаково. Это означает, что мы можем использовать различные ключевые аргументы, которые предоставляет функция

Изменение графика Seaborn с помощью цвета

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

Мы можем добавить дополнительные параметры цвета, используя параметр hue=. Давайте исследуем, как мы можем добавлять дополнительные уровни детализации с использованием цвета.

Добавление цвета в Seaborn Displot

Чтобы добавить дополнительную переменную в вашу функцию displot() в Seaborn, вы можете использовать параметр hue=, чтобы передать столбец DataFrame, который разделит данные на несколько цветов.

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

Добавление цветовых стилей вместо добавления цветовых измерений

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

Давайте посмотрим, как мы можем использовать Seaborn для добавления дополнительных деталей к нашему графику, используя параметр hue=

# Добавление цвета с помощью параметра hue
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.displot(data=df, x='tip', hue='sex', multiple='stack')
plt.show()

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

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

Объединение гистограммы с графиком KDE в Seaborn displot

С помощью функции displot() в библиотеке Seaborn мы можем легко объединить создаваемую гистограмму с оценкой плотности ядра. Вместо создания отдельного объекта осей позволяет передать параметр kde=True, который будет рисовать оценку прямо на гистограмме.

# Комбинирование гистограммы с графиком оценки плотности ядра (KDE)
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.displot(data=df, x='tip', kde=True)
plt.show()

В приведенном выше блоке кода мы создали простую гистограмму с помощью функции displot(), но инструктировали функцию отрисовать оценку плотности ядра. Это возвращает изображение ниже:

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

Построение двумерного распределения в Seaborn Displot

По умолчанию Seaborn будет строить распределение одной переменной. Однако мы можем построить графики бивариантного распределения, используя функцию displot, просто передавая метки столбцов в параметры x= и y=

# Построение двумерных распределений
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.displot(data=df, x='tip', y='total_bill')
plt.show()

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

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

# Построение двумерных распределений с графиком оценки плотности ядра (KDE)
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.displot(data=df, x='tip', y='total_bill', kind='kde')
plt.show()

В приведенном выше блоке кода мы добавили kind='kde', что строит оценку ядерной плотности. При построении двумерного распределения это возвращает изображение ниже:

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

Добавление Rugplot в график Seaborn

Вместо того, чтобы вызывать функцию rugplot напрямую, Seaborn позволяет добавить коврик-график, используя аргумент rug=True в функции displot. Это упрощает создание графика и делает код значительно чище.

# Добавление графика-дерева
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.displot(data=df, x='tip', kind='kde', rug=True)
plt.show()

В приведенном выше блоке кода мы передали rug=True, что привело к отображению ковровой диаграммы на гистограмме, как показано ниже:

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

Создание подмножеств графиков со строками и столбцами

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

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

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

Добавление столбцов в график Seaborn

Чтобы создать колонки подграфиков, можно использовать параметр col=. Данный параметр принимает либо метку столбца DataFrame Pandas, либо массив данных. Давайте разделим нашу визуализацию данных на колонки, основываясь на принадлежности к определенной акции:

# Создание столбцов малых множеств
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.displot(data=df, x='tip', col='day')
plt.show()

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

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

Из-за этого мы можем использовать параметр col_wrap=, чтобы переносить графики на новую строку. Параметр принимает целое число, которое указывает, сколько столбцов должно быть, прежде чем графики будут перенесены на следующую строку.

# Добавление переноса столбцов для малых множеств
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.displot(data=df, x='tip', col='day', col_wrap=3)
plt.show()

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

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

Добавление строк в график Seaborn

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

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

# Создание строк и столбцов малых множеств
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.displot(data=df, x='tip', row='sex', col='day')
plt.show()

В приведенном выше блоке кода мы использовали row='sex' и col='day', чтобы разделить малые множества на основе обеих этих колонок. Это приводит к следующей визуализации данных:

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

Изменение названий и меток осей в отображении Seaborn

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

Добавление заголовка к графику Seaborn

Чтобы добавить заголовок к displot() в Seaborn, можно использовать метод fig.suptitle(), доступный в Matplotlib. Для этого сначала потребуется настроить интервалы в объекте фигуры. Этот процесс может быть несколько эвристическим и требовать метода проб и ошибок.

Взгляните на блок кода ниже:

# Добавление заголовка к displot
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

dist = sns.displot(data=df, x='tip', row='sex', col='day')
dist.fig.subplots_adjust(top=0.92)
dist.fig.suptitle('Сравнение суммы чаевых')
plt.show()

В приведенном выше блоке кода мы внесли ряд важных изменений:

  1. Мы отфильтровали DataFrame, чтобы визуализацию было легче увидеть

  2. Мы присвоили displot переменной, dist

  3. Затем мы отрегулировали верхний отступ, используя fig.subplots_adjust()

  4. Затем мы применили к объекту фигуры метод suptitle()

Это привело к следующей визуализации данных:

Точно так же мы можем настраивать заголовки каждого из создаваемых нами подграфиков. Давайте далее рассмотрим это подробнее.

Добавление заголовков к строкам и столбцам в отображении Seaborn

Seaborn предлагает невероятно гибкие опции форматирования для стилизации небольших многократных элементов, созданных с помощью параметров col= и row=

# Изменение заголовков малых множеств
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

# Создание displot с заданными параметрами
dist = sns.displot(data=df, x='tip', row='sex', col='day')

# Подгонка расположения графиков и добавление общего заголовка
dist.fig.subplots_adjust(top=0.92)
dist.fig.suptitle('Сравнение суммы чаевых')

# Установка заголовков для строк и столбцов
dist.set_titles(row_template='Пол сотрудника: {row_name}', col_template='День недели: {col_name}')

# Показать график
plt.show()

В приведенном выше блоке кода мы использовали метод .set_titles(), доступный для объектов FacetGrid. Этот метод позволяет использовать параметры row_template= и col_template=, которые дают возможность доступа к переменным col_name и row_name с использованием f-string форматирования

Это возвращает визуализацию данных ниже:

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

Изменение меток осей в графике Seaborn

По умолчанию Seaborn будет использовать метки столбцов в качестве меток осей в визуализации. Однако во многих случаях это может быть не самым описательным заголовком. Поскольку функция displot() возвращает объект FacetGrid, мы можем использовать вспомогательные методы для решения этой проблемы, включая:

  • .set_xlabel() который устанавливает метку оси X

  • .set_ylabel()который устанавливает метку оси Y

  • .set_axis_labels() который одновременно устанавливает метки осей X и Y

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

# Добавление подписей к осям для малых множеств
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

# Создание displot с заданными параметрами
dist = sns.displot(data=df, x='tip', row='sex', col='day')

# Подгонка расположения графиков и добавление общего заголовка
dist.fig.subplots_adjust(top=0.92)
dist.fig.suptitle('Сравнение суммы чаевых')

# Установка заголовков для строк и столбцов
dist.set_titles(row_template='Пол сотрудника: {row_name}', col_template='День недели: {col_name}')

# Добавление подписей к осям
dist.set_xlabels('Сумма чаевых')
dist.set_ylabels('Количество транзакций')

# Показать график
plt.show()

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

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

Изменение размера графика Seaborn

Так как функция displot() в Seaborn возвращает объект FacetGrid, мы можем легко изменить размер возвращаемого объекта фигуры. Для этого можно использовать два следующих параметра:

  1. height= который определяет высоту в дюймах каждой грани

  2. aspect=который определяет соотношение сторон, так что height * aspect

Давайте посмотрим, как можно изменить размер более простой визуализации данных в Seaborn:

# Изменение размера фигуры
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('tips')

sns.displot(data=df, x='tip', kde=True, height=5, aspect=1.6)
plt.show()

В переданном коде указаны параметры height=5, aspect=1.6. Это означает, что высота каждого элемента будет 5 дюймов, а ширина — 8 дюймов (5 * 1.6). В результате будет получена следующая визуализация данных:

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

Заключение

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

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

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

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

Last updated