Графики отношений (relational plots) относятся к типу графиков, которые показывают взаимосвязи между двумя или более переменными. Эти графики позволяют находить зависимости и закономерности в данных.
В библиотеке seaborn существует два основных типа графиков отношений:
-
Диаграмма рассеяния (scatter plot). Диаграмма рассеяния показывает взаимосвязь двух переменных в виде точек на графике. В библиотеке seaborn диаграммы рассеяния строятся функцией
scatterplot()
. -
Линейный график (line plot). Линейный график представляет собой линию, последовательно соединяющую точки данных. Он особенно эффективен для демонстрации изменений переменной во времени. В библиотеке seaborn линейные графики строятся функцией
lineplot()
.
Также в библиотеке seaborn имеется универсальная функция relplot()
, которая позволяет создавать как диаграммы рассеяния, так и линейные графики.
Функция scatterplot()
Как уже было сказано выше, в библиотеке seaborn за создание диаграмм рассеяния отвечает функция scatterplot()
. Приведём основные параметры этой функции:
-
data
: DataFrame или массив с данными; -
x
: название столбца или вектор данных для осиX
; -
y
: название столбца или вектор данных для осиY
; -
hue
: название столбца или вектор данных для группировки точек по цвету; -
size
: название столбца или вектор данных для изменения размера точек; -
style
: название столбца или вектор данных для изменения стиля точек (например, разные формы); -
palette
: цветовая палитра для переменнойhue
; -
hue_order
: задаёт порядок отображения категорий для переменнойhue
; -
hue_norm
: позволяет нормализовать данные переменнойhue
; -
sizes
: диапазон размеров для переменнойsize
; -
size_order
: задаёт порядок отображения категорий для переменнойsize
; -
size_norm
: позволяет нормализовать данные переменнойsize
, задавая диапазон значений; -
markers
: список стилей маркеров для переменнойstyle
; -
style_order
: задаёт порядок отображения категорий для переменнойstyle
.
В этой статье, для демонстрации примеров, мы будем использовать один из встроенных в библиотеку seaborn датасетов, а именно - датасет 'penguins'
, содержащий информацию о трёх видах пингвинов, обитающих на островах: Biscoe, Dream, Torgersen.
Загрузим этот датасет и посмотрим на данные, содержащиеся в нём:
import pandas as pd
import seaborn as sns
penguins = sns.load_dataset('penguins').dropna()
penguins.head()
Результат:
penguins.info()
Результат:
<class 'pandas.core.frame.DataFrame'>
Index: 333 entries, 0 to 343
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 species 333 non-null object
1 island 333 non-null object
2 bill_length_mm 333 non-null float64
3 bill_depth_mm 333 non-null float64
4 flipper_length_mm 333 non-null float64
5 body_mass_g 333 non-null float64
6 sex 333 non-null object
dtypes: float64(4), object(3)
memory usage: 20.8+ KB
Датасет penguins
содержит следующие столбцы:
-
'species'
- вид пингвина (Adelie, Chinstrap, Gentoo); -
'island'
- остров, где были собраны данные (Biscoe, Dream, Torgersen); -
'bill_length_mm'
- длина клюва в миллиметрах; -
'bill_depth_mm'
- глубина клюва в миллиметрах; -
'flipper_length_mm'
- длина ласт в миллиметрах; -
'body_mass_g'
- масса тела в граммах; -
'sex'
- пол пингвина (Male, Female).
Построим диаграмму рассеяния, на которой по оси X
будут отображены значения длины клюва, а по оси Y
- значения глубины клюва:
import matplotlib.pyplot as plt
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm')
plt.show()
Результат:
На данный момент на графике нет сетки координат. Отображение координатной сетки зависит от выбранного стиля. Стиль отображения можно изменять функцией set_style()
. Белый стиль без отображения координатной сетки называется 'white'
. Чтобы на графике отображались линии сетки координат, надо функции set_style()
передать атрибут 'whitegrid'
:
sns.set_style('whitegrid')
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm')
plt.show()
Результат:
В библиотеке seaborn можно также использовать "тёмную" тему с линиями сетки координат, которая называется 'darkgrid'
:
sns.set_style('darkgrid')
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm')
plt.show()
Результат:
Помимо выбора стилей, пользователи могут изменять цвет, размер и форму точек на графике. Далее давайте рассмотрим эти возможности.
параметр color функции scatterplot()
Цвет точек меняется параметром color
, которому передаётся наименование выбранного цвета или его HEX-код (хекс-код). Например, сделаем точки на графике зелёного цвета:
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm',
color='green')
plt.show()
Результат:
параметр alpha функции scatterplot()
Параметр alpha
управляет прозрачностью точек на графике рассеяния. Этот параметр принимает значение от 0 до 1, где 0 означает полностью прозрачные точки, а 1 - полностью непрозрачные. Настройка прозрачности точек может быть полезна для улучшения читаемости графика, особенно когда точки перекрываются.
Для примера сделаем точки полупрозрачными:
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm',
color='green',
alpha=0.5)
plt.show()
Результат:
параметр s функции scatterplot()
Параметр s
функции scatterplot()
управляет размером точек на графике рассеяния. Этот параметр принимает числовое значение.
Увеличим размер точек на графике:
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm',
color='green',
alpha=0.5,
s=100)
plt.show()
Результат:
параметр marker функции scatterplot()
Параметр marker
в функции scatterplot()
определяет форму маркеров (точек) на графике рассеяния.
Вот некоторые из доступных кодов маркеров:
-
'o'
: круг; -
's'
: квадрат; -
'^'
: треугольник вверх; -
'v'
: треугольник вниз; -
'>'
: треугольник вправо; -
'<'
: треугольник влево; -
'x'
: крестик; -
'*'
: звёздочка; -
'D'
: ромб; -
'H'
: шестиугольник.
Например, поменяем кружочки на квадратики:
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm',
color='green',
alpha=0.5,
s=100,
marker='s')
plt.show()
Результат:
параметр hue функции scatterplot()
Параметр hue
("хью") используется для добавления дополнительного измерения к графику рассеяния путем изменения цвета точек в зависимости от значений указанной категории, что позволяет визуализировать различия между группами данных на одном графике.
Параметру hue
передаётся имя той переменной, по которой мы хотим произвести разделение точек на группы. Например, разделим пингвинов по принадлежности к тому или иному острову:
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm',
hue='island')
plt.show()
Результат:
Или разделим на группы по видам пингвинов:
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm',
hue='species')
plt.show()
Результат:
Посмотрев на эти два графика, можно прийти к некоторому умозаключению, что пингвины вида Adelie обитают на всех трёх островах, в отличие от представителей двух других видов.
Параметру hue
можно передавать не только категориальную переменную, но и количественную. Например, посмотрим на распределение данных с группировкой по массе тела пингвинов:
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm',
hue='body_mass_g')
plt.show()
Результат:
В этом случае мы наблюдаем, как пингвины с различной массой тела распределились по разным группам, и каждая из них получила свой уникальный цветовой оттенок.
Из этого рисунка можно заключить, что пингвины, расположенные в правой нижней четверти графика, обладают более значительной массой тела по сравнению с остальными.
параметр hue_norm функции scatterplot()
Параметр hue_norm
используется для нормализации цветовой шкалы при отображении данных с помощью параметра hue
. Параметру передаётся кортеж с минимальным и максимальным значениями, в пределах которых цветовая палитра будет меняться от самого светлого тона до самого тёмного. Это может пригодиться в случаях, когда вы хотите акцентировать внимание на определенном диапазоне значений.
Например, сделаем так, чтобы оттенки менялись только у точек, соответствующих массе пингвинов от 2700 до 4000:
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm',
hue='body_mass_g',
hue_norm=(2700, 4000))
plt.show()
Результат:
В этом примере точки, соответствующие массе пингвинов свыше 4000 грамм, окрашены в максимально тёмный цвет для этой палитры.
параметр hue_order функции scatterplot()
Параметр hue_order
используется для определения порядка категорий, которые будут отображаться в графике рассеяния при использовании параметра hue
. Он принимает список значений, которые определяют порядок отображения категорий, что позволяет контролировать, какие цвета будут назначены конкретным категориям.
Для примера изменим порядок отображения видов пингвинов:
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm',
hue='species',
hue_order=['Gentoo', 'Chinstrap', 'Adelie'])
plt.show()
Результат:
О других возможностях функции scatterplot() и о работе с функцией lineplot() библиотеки seaborn, вы можете узнать из бесплатной части моего курса на платформе Stepik: https://stepik.org/204124
Автор: sevsp