Диаграмма рассеяния показывает взаимосвязь двух переменных в виде точек на графике. В библиотеке seaborn диаграммы рассеяния строятся функцией scatterplot()
.
Перейдём сразу к практике!
Для начала нам нужны данные, на которых мы будем "обкатывать" функцию scatterplot()
.
Тренироваться будем на пингвинах.
Воспользуемся встроенным в библиотеку seaborn датасетом 'penguins'
, который содержит информацию о трёх видах пингвинов, обитающих на островах: Biscoe, Dream, Torgersen.
Загрузим датасет и распечатаем последние (или крайние) 5 строчек, предварительно импортировав библиотеку seaborn как sns:
import seaborn as sns
penguins = sns.load_dataset('penguins').dropna()
penguins.tail()
Результат:
Вот краткое описание, содержащейся в датасете информации:
'species'
- вид пингвина (Adelie, Chinstrap, Gentoo);'island'
- остров, где были собраны данные (Biscoe, Dream, Torgersen);'bill_length_mm'
- длина клюва в миллиметрах;'bill_depth_mm'
- глубина клюва в миллиметрах;'flipper_length_mm'
- длина ласт в миллиметрах;'body_mass_g'
- масса тела в граммах;'sex'
- пол пингвина (Male, Female).
Построим нашу первую диаграмму рассеяния следующим образом:
import matplotlib.pyplot as plt
sns.scatterplot(x=penguins['bill_length_mm'], y=penguins['bill_depth_mm'])
plt.show()
Результат:
Мы использовали параметры x
и y
функции scatterplot()
, которым передали значения столбцов penguins['bill_length_mm']
и penguins['bill_depth_mm']
, соответственно. А также использовали функцию show()
библиотеки matplotlib для отображения графика, предварительно импортировав нужный модуль этой библиотеки как plt
.
Это был один из вариантов передачи значений в функцию scatterplot()
. Другим вариантом является подключение параметра data
. В этом случае параметру data
мы передаем название датафрейма (он у нас называется penguins
), а параметрам x
и y
- названия столбцов датафрейма, но уже без квадратных скобок:
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
Цвет точек меняется параметром color
, которому передаётся наименование выбранного цвета. Например, сделаем точки на графике зелёного цвета:
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm',
color='green')
plt.show()
Результат:
параметр alpha
Параметр 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
Параметр s
функции scatterplot()
управляет размером точек на графике рассеяния. Этот параметр принимает числовое значение.
Увеличим размер точек на графике:
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm',
color='green',
alpha=0.5,
s=100)
plt.show()
Результат:
параметр marker
Параметр 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
Параметр 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
Параметр 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
Параметр hue_order
используется для определения порядка категорий, которые будут отображаться в графике рассеяния при использовании параметра hue
. Он принимает список значений, которые определяют порядок отображения категорий, что позволяет контролировать, какие цвета будут назначены конкретным категориям.
Для примера изменим порядок отображения видов пингвинов:
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm',
hue='species',
hue_order=['Gentoo', 'Chinstrap', 'Adelie'])
plt.show()
Результат:
параметр style
Параметр style
в функции sns.scatterplot()
используется для изменения стиля (формы) точек в зависимости от значений указанной переменной. Это позволяет добавить еще одно измерение к визуализации данных, делая график более информативным и наглядным.
Например, установим форму точек в зависимости от вида пингвинов:
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm',
style='species',
s=70)
plt.show()
Результат:
Разбиение точек на категории по их форме может быть полезным при печати графика в чёрно-белом формате.
Параметр style
может быть использован вместе с hue
, что позволяет одновременно использовать цвет и форму точек для отображения дополнительных измерений данных.
Например, добавим на предыдущий график ещё и разделение по цвету:
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm',
style='species',
s=70,
hue='species')
plt.show()
Результат:
Или используем переменную 'island'
для разбиения точек по цвету:
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm',
style='species',
s=70,
hue='island')
plt.show()
Результат:
Из этого графика наглядно видно, что пингвины вида Adelie обитают на всех трёх островах, в отличие от представителей двух других видов.
С помощью параметра markers
(ранее мы рассмотрели другой параметр - параметр marker
) можно задать, какие формы будут использоваться для различных категорий данных. Он используется вместе с параметром style
.
Для примера зададим собственные формы маркеров для различных категорий:
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm',
style='species',
s=70,
hue='species',
markers=['<', '^', '>'])
plt.show()
Результат:
параметр size
Параметр size
позволяет задать переменную, по значениям которой будут изменяться размеры точек на графике. Этот параметр может работать как с категориальными, так и с числовыми данными, но наиболее полезен при работе с числовыми данными, так как размеры точек будут пропорциональны значениям этой переменной. Например:
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm',
size='body_mass_g')
plt.show()
Результат:
На этом графике, чем выше масса пингвина, тем больше диаметр точки на диаграмме.
Или, например, использование параметра size
с категориальной переменной, совместно с параметром hue
:
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm',
size='species',
hue='species')
plt.show()
Результат:
Применение параметра size
с категориальными переменными может пригодиться в случаях, когда присутствует ранговость в категориях.
параметр sizes
Параметр sizes
функции sns.scatterplot()
используется для задания диапазона размеров точек на графике. Этот параметр позволяет контролировать минимальный и максимальный размеры точек, делая визуализацию более понятной и информативной.
Пример использования параметра sizes
с количественной переменной 'body_mass_g'
:
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm',
size='body_mass_g',
sizes=(5, 200))
plt.show()
Результат:
В данном случае, размеры точек на графике увеличиваются с 5 (для 3000) до 200 (для 6000).
Применение параметра sizes
с категориальной переменной (например, size='species'
), позволяет задать собственные размеры точек для каждой категории. Например, выделим на графике точки, соответствующие пингвинам вида 'Chinstrap'
:
sns.scatterplot(data=penguins, x='bill_length_mm', y='bill_depth_mm',
size='species',
hue='species',
sizes=[20, 100, 20])
plt.show()
Результат:
В этом примере, размеры точек для пингвинов видов Adelie и Gentoo равны 20, а для пингвинов Chinstrap = 100. Удобно, когда нужно визуально выделить какую-то отдельную категорию данных.
На этом я заканчиваю повествование о возможностях функции scatterplot()
. Надеюсь, что вам было познавательно.
Мой углублённый курс о возможностях библиотеки seaborn размещён на платформе Stepik: https://stepik.org/204124
Также на Stepik есть несколько моих курсов по темам визуализации, pandas, машинного обучения.