В этом подробном руководстве вы узнаете всё необходимое о создании точечных диаграмм в библиотеке Seaborn. Точечные диаграммы — это один из ключевых типов визуализации данных, которые помогают исследовать зависимости между переменными. Умение эффективно создавать и настраивать scatter plots в Python значительно упростит ваш рабочий процесс анализа данных!
К концу этого урока вы научитесь:
Создавать точечные диаграммы в Python с помощью Seaborn
Настройке цветов, маркеров и размеров точек на диаграмме
Создавать 3D-точечные диаграммы и добавлять линии регрессии
Добавлять заголовки и подписи осей на графики
Содержание
Понимание функции scatterplot() в Seaborn
Прежде чем приступить к созданию и настройке точечных диаграмм в Seaborn, важно разобраться в работе функции scatterplot(). Это поможет лучше понять возможности этой функции и то, как её использовать. Давайте рассмотрим, как она применяется:
# Понимание функции scatterplot() в Seaborn
import seaborn as sns
# Создание точечной диаграммы для отображения связи между двумя числовыми переменными.
# Аргументы:
# data: DataFrame, Series или массив. Набор данных для построения графика.
# x, y: Имена переменных в 'data' или векторы данных. Позиции точек по осям X и Y.
# hue: Имя переменной в 'data' или вектор данных. Группировка точек по цвету.
# size: Имя переменной в 'data' или вектор данных. Группировка точек по размеру.
# style: Имя переменной в 'data' или вектор данных. Группировка точек по стилю маркера.
# palette: Имя палитры, список цветов или словарь. Цвета для разных уровней 'hue'.
# hue_order: list of strings, необязательный. Порядок отображения категорий 'hue'.
# hue_norm: tuple или Normalize object, необязательный. Нормализация для маппинга числового 'hue'.
# sizes: list, dict или tuple, необязательный. Размеры для разных уровней 'size'.
# size_order: list of strings, необязательный. Порядок отображения категорий 'size'.
# size_norm: tuple или Normalize object, необязательный. Нормализация для маппинга числового 'size'.
# markers: bool, list of markers, необязательный. Используется ли маркер. True (по умолчанию) - использовать маркеры.
# style_order: list of strings, необязательный. Порядок отображения категорий 'style'.
# legend: {'auto', 'brief', 'full', False}, необязательный. Как рисовать легенду.
# ax: matplotlib Axes, необязательный. Оси, на которых рисуется график.
sns.scatterplot(data=None, x=None, y=None, hue=None, size=None, style=None, palette=None, hue_order=None, hue_norm=None, sizes=None, size_order=None, size_norm=None, markers=True, style_order=None, legend='auto', ax=None)
Можно видеть, что функция предоставляет множество различных параметров.
Грамотное использование этих параметров позволяет создавать чрезвычайно полезные визуализации, такие как та, что показана ниже:
# Что вы сможете сделать в конце этого урока
import seaborn as sns
import matplotlib.pyplot as plt
# Загрузка встроенного датасета 'penguins' из Seaborn
df = sns.load_dataset('penguins')
# Установка стиля графика 'whitegrid' для лучшей читаемости
sns.set_style(style='whitegrid')
# Создание точечной диаграммы
sns.scatterplot(
data=df, # Использование загруженного DataFrame с данными о пингвинах
x='bill_length_mm', # Переменная для оси X: длина клюва в мм
y='bill_depth_mm', # Переменная для оси Y: глубина клюва в мм
hue='species', # Группировка точек по виду пингвина (цвет)
style='sex', # Группировка точек по полу (стиль маркера)
palette='Paired_r' # Цветовая палитра для разных видов пингвинов (реверсивная версия Paired)
)
# Добавление заголовка графика
plt.title('Exploring Physical Attributes of Different Penguins')
# Добавление подписи для оси X
plt.xlabel('Bill Length (mm)')
# Добавление подписи для оси Y
plt.ylabel('Bill Depth (mm)')
# Размещение легенды вне графика для избежания наложения на данные
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0)
# Отображение графика
plt.show()
Давайте подробнее рассмотрим эти параметры, чтобы лучше понять их поведение и значения по умолчанию. В таблице ниже приведены основные параметры, доступные в функции sns.scatterplot():
Параметр
Описание
Значение по умолчанию
Принятые значения
data=
Используемая структура данных, например Pandas DataFrame.
None
Pandas DataFrame или массив NumPy
x=
Переменные, задающие значения по оси x
None
Векторы или ключи вdata
y=
Переменные, задающие значения по оси Y
None
Векторы или ключи вdata
hue=
Группирующая переменная, которая создает точки разных цветов (как категориальные, так и числовые)
None
Векторы или ключи вdata
size=
Группирующая переменная, которая выдает точки разного размера (категорийные или числовые)
None
Векторы или ключи вdata
style=
Группирующая переменная, которая создает точки разного стиля (категорийные или числовые)
None
Векторы или ключи вdata
palette=
Метод выбора цветов для использования при картографировании
None
строка, список, словарь или цветовая карта Matplotlib
hue_order=
Порядок обработки и построения графиков для категориальных уровней семантики hue
None
список строк
hue_norm=
Либо пара значений, устанавливающая диапазон нормализации в единицах данных, либо объект, который будет отображаться в диапазоне [0, 1]
None
кортеж или matplotlib нормализовать
sizes=
Объект, определяющий, как выбираются размеры.
None
список, словарь или кортеж
size_order=
Указанный порядок появления уровней переменной размера.
None
список
size_norm=
Нормализация единиц данных для масштабирования объектов графика, когда переменная размера является числовой
None
кортеж или нормализация объекта
markers=
Объект, определяющий, как рисовать маркеры для разных уровней переменной стиля.
None
булев, список или словарь
style_order=
Конкретный порядок появления переменной стиля.
None
список
legend=
Как нарисовать легенду
'auto'
'auto', 'brief', 'full', or False
ax=
Существующие оси участка.
None
matplotlib Оси
Примечание: Функция sns.scatterplot() также может быть вызвана с помощью sns.relplot().
Функция sns.scatterplot() является функцией уровня осей (axes-level). Если вам нужно создать более сложные графические фигуры, вы можете использовать функцию sns.relplot(), которая работает на уровне фигур (figure-level). Это даёт больше гибкости при построении нескольких графиков и управлении общим стилем изображения.
Как создать точечный график в Python с использованием Seaborn
В этом разделе вы узнаете, как строить точечные диаграммы с помощью функции scatterplot() в Seaborn. Для примера мы воспользуемся набором данных, который позволяет опробовать множество доступных возможностей. Отличным выбором станет встроенный в Seaborn датасет 'penguins'.
Начнём с импорта библиотеки и загрузки набора данных, а затем построим наш первый точечный график:
# Загрузка датасета с пингвинами
import seaborn as sns
# Загрузка встроенного датасета 'penguins' из библиотеки Seaborn
df = sns.load_dataset('penguins')
# Вывод информации о DataFrame, включая типы данных столбцов и количество непустых значений
print(df.info())
# Возвращает:
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 344 entries, 0 to 343 (индекс от 0 до 343, всего 344 записи)
# Data columns (total 7 columns): (всего 7 столбцов данных)
# # Column Non-Null Count Dtype
# --- ------ -------------- -----
# 0 species 344 non-null object (вид пингвина, 344 непустых, тип данных - объект/строка)
# 1 island 344 non-null object (остров, 344 непустых, тип данных - объект/строка)
# 2 bill_length_mm 342 non-null float64 (длина клюва в мм, 342 непустых, тип данных - число с плавающей точкой)
# 3 bill_depth_mm 342 non-null float64 (глубина клюва в мм, 342 непустых, тип данных - число с плавающей точкой)
# 4 flipper_length_mm 342 non-null float64 (длина ласта в мм, 342 непустых, тип данных - число с плавающей точкой)
# 5 body_mass_g 342 non-null float64 (масса тела в граммах, 342 непустых, тип данных - число с плавающей точкой)
# 6 sex 333 non-null object (пол, 333 непустых, тип данных - объект/строка)
# dtypes: float64(4), object(3) (типы данных: 4 столбца float64, 3 столбца object)
# memory usage: 18.9+ KB (использование памяти)
# None
Можно видеть, что набор данных включает множество категориальных и числовых столбцов, что позволяет опробовать различные полезные функции.
Теперь воспользуемся функцией scatterplot() и построим график зависимости длины и глубины клюва пингвинов друг от друга:
# Создание нашей первой точечной диаграммы
import seaborn as sns
import matplotlib.pyplot as plt
# Загрузка встроенного датасета 'penguins' из библиотеки Seaborn
df = sns.load_dataset('penguins')
# Создание точечной диаграммы с длиной клюва по оси X и глубиной клюва по оси Y
sns.scatterplot(data=df, x='bill_length_mm', y='bill_depth_mm')
# Отображение графика
plt.show()
Передав Pandas DataFrame в параметр data=, мы смогли обращаться к столбцам этого DataFrame как к строкам. Такой подход является декларативным и позволяет абстрагироваться от сложностей работы с данными в виде Series.
Мы можем создать тот же точечный график, написав:
# Альтернативный метод создания точечной диаграммы в Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
# Загрузка встроенного датасета 'penguins' из библиотеки Seaborn
df = sns.load_dataset('penguins')
# Создание точечной диаграммы путем передачи Series напрямую в x и y
sns.scatterplot(x=df['bill_length_mm'], y=df['bill_depth_mm'])
# Отображение графика
plt.show()
Этот код создаёт такой же точечный график. Здесь мы передаём непосредственно Series данных, которые хотим использовать для построения визуализации, вместо применения декларативного метода.
В следующем разделе вы узнаете, как добавлять цвета на точечные графики в Seaborn.
Как добавить цвет на точечный график в Seaborn с помощью параметра hue
На данный момент наш точечный график отображает распределение двух переменных. Мы можем добавить третью переменную, используя цвет. Это можно сделать с помощью параметра hue=, который принимает имя столбца.
В зависимости от типа переданной переменной поведение графика будет различаться. Параметр hue= позволяет передавать:
Категориальные переменные, где каждый цвет представляет отдельную категорию
Непрерывные переменные, где цвет изменяется градиентом вдоль шкалы
Давайте сначала рассмотрим пример с категориальной переменной, чтобы увидеть, как добавить дополнительное измерение в наши данные:
# Добавление категориального цвета к нашей точечной диаграмме Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
# Загрузка встроенного датасета 'penguins' из библиотеки Seaborn
df = sns.load_dataset('penguins')
# Создание точечной диаграммы, где точки окрашены в зависимости от вида пингвина ('species')
sns.scatterplot(data=df, x='bill_length_mm', y='bill_depth_mm', hue='species')
# Отображение графика
plt.show()
Поскольку данные в столбце 'species' являются категориальными, цвета на точечном графике отображаются дискретно. Мы также можем заметить, что автоматически была создана легенда.
Параметр hue= также можно использовать для передачи непрерывной переменной. Давайте посмотрим, как изменится наша визуализация, если передать переменную 'body_mass_g':
# Добавление непрерывного цвета к нашей точечной диаграмме Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
# Загрузка встроенного датасета 'penguins' из библиотеки Seaborn
df = sns.load_dataset('penguins')
# Создание точечной диаграммы, где точки окрашены в зависимости от массы тела ('body_mass_g')
sns.scatterplot(data=df, x='bill_length_mm', y='bill_depth_mm', hue='body_mass_g')
# Отображение графика
plt.show()
Можно видеть, что при использовании непрерывной переменной в качестве аргумента для параметра hue=, отображается следующее изображение. Цвет изменяется градиентом, при этом значения плавно переходят друг в друга по шкале цветовой палитры, что отражает конкретные значения непрерывной переменной.
На следующем рисунке вы узнаете, как настроить размер маркеров в точечных диаграммах Seaborn.
Как изменить размер маркеров в точечных графиках Seaborn
Seaborn также позволяет настраивать размер маркеров с помощью параметра size=. Передав имя столбца из Pandas DataFrame, вы можете задать относительный размер маркеров в зависимости от значений в этом столбце. Давайте посмотрим, как это выглядит:
# Настройка размера маркеров в точечных диаграммах Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
# Загрузка встроенного датасета 'penguins' из библиотеки Seaborn
df = sns.load_dataset('penguins')
# Создание точечной диаграммы, где размер точек зависит от массы тела ('body_mass_g')
sns.scatterplot(data=df, x='bill_length_mm', y='bill_depth_mm', size='body_mass_g')
# Отображение графика
plt.show()
Можно заметить, что различия в размерах маркеров не слишком заметны. Seaborn позволяет задать относительные размеры маркеров, передав кортеж с минимальным и максимальным размерами в параметр sizes=. Это позволяет явно указать диапазон размеров, как показано ниже:
# Указание диапазонов размеров маркеров в точечных диаграммах Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
# Загрузка встроенного датасета 'penguins' из библиотеки Seaborn
df = sns.load_dataset('penguins')
# Создание точечной диаграммы, где размер точек зависит от массы тела ('body_mass_g'),
# а диапазон размеров маркеров задан от 1 до 100
sns.scatterplot(data=df, x='bill_length_mm', y='bill_depth_mm', size='body_mass_g', sizes=(1,100))
# Отображение графика
plt.show()
В следующем разделе вы узнаете, как изменять маркеры в точечных диаграммах Seaborn.
Как изменить маркеры в точечных графиках Seaborn
Аналогично тому, как мы изменяли цвет маркеров на точечной диаграмме, мы можем изменять и сами маркеры. Это особенно полезно для улучшения доступности графиков и их восприятия при печати в черно-белом виде.
Для этого можно использовать параметр style=, передав в него переменную. Этот параметр также можно комбинировать с уже знакомым вам параметром hue=. Таким образом, значения будут отличаться как по цвету, так и по стилю маркеров, что делает визуализацию более понятной и доступной.
# Изменение стиля маркера в Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
# Загрузка встроенного датасета 'penguins' из библиотеки Seaborn
df = sns.load_dataset('penguins')
# Создание точечной диаграммы, где стиль и цвет маркеров зависят от вида пингвина ('species')
sns.scatterplot(data=df, x='bill_length_mm', y='bill_depth_mm', style='species', hue='species')
# Отображение графика
plt.show()
Можно видеть, что такая визуализация становится намного доступнее, особенно для людей с нарушением цветового восприятия.
Как добавить линию на точечный график Seaborn
Добавляя линию на точечный график Seaborn, вы можете визуализировать тенденции регрессии между двумя переменными. Поскольку здесь мы анализируем взаимосвязь двух переменных с точки зрения регрессии, вместо scatterplot() используется функция lmplot().
Давайте посмотрим, как можно сравнить длину и глубину клюва и отобразить линию регрессии в Seaborn:
# Добавление линии регрессии к точечной диаграмме Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
# Загрузка встроенного датасета 'penguins' из библиотеки Seaborn
df = sns.load_dataset('penguins')
# Создание точечной диаграммы с линией регрессии с использованием sns.lmplot()
sns.lmplot(data=df, x='bill_length_mm', y='bill_depth_mm')
# Отображение графика
plt.show()
В следующем разделе вы узнаете, как создавать трёхмерные точечные диаграммы (3D scatter plots) в Seaborn.
Как создать 3D-точечный график в Python с помощью Seaborn
В этом разделе вы научитесь строить трёхмерные точечные диаграммы. Поскольку библиотека Seaborn построена на основе Matplotlib, мы можем использовать возможности последней для создания графиков в трёх измерениях. Чтобы узнать больше о данном процессе, ознакомьтесь с моим полным руководством по созданию 3D-точечных графиков в Python с использованием Seaborn и Matplotlib.
# Создание 3D-точечной диаграммы в Python
import seaborn as sns
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d # Импорт модуля для 3D-графики
# Создание нового объекта Figure и Axes для 3D-графика
fig = plt.figure()
ax = plt.axes(projection='3d') # Установка проекции осей как 3D
# Загрузка встроенного датасета 'penguins' из библиотеки Seaborn
df = sns.load_dataset('penguins')
# Извлечение данных для осей X, Y и Z
x=df['bill_length_mm'] # Длина клюва для оси X
y=df['bill_depth_mm'] # Глубина клюва для оси Y
z=df['body_mass_g'] # Масса тела для оси Z
# Построение 3D-точечной диаграммы
ax.scatter(x, y, z)
# Отображение графика
plt.show()
В приведённом выше коде мы:
Импортировали mpl_toolkits, чтобы иметь возможность строить графики на трёхмерных осях.
Создали объекты fig и ax, в которых указали, что хотим использовать трёхмерную проекцию (projection='3d').
Затем определили переменные x, y и z и передали их в функцию scatter() из Matplotlib.
Этот код возвращает следующее изображение:
В следующем разделе вы узнаете, как добавлять несколько точечных графиков в Python с помощью Seaborn.
Добавление нескольких точечных графиков в Python с использованием FacetGrid
Мы можем использовать объект FacetGrid из Seaborn, чтобы отобразить несколько точечных диаграмм. Это позволяет легко разбивать данные по различным категориям и строить отдельные графики для каждой из них. Таким образом, вы сможете лучше анализировать, как значения распределены по разным переменным.
Давайте посмотрим, как использовать FacetGrid для построения нескольких точечных графиков:
# Использование FacetGrid для добавления нескольких точечных диаграмм в Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
# Загрузка встроенного датасета 'penguins' из библиотеки Seaborn
df = sns.load_dataset('penguins')
# Создание объекта FacetGrid:
# data=df: Использование DataFrame с данными о пингвинах.
# col='species': Создание отдельных столбцов графиков для каждого уникального значения в 'species' (вида пингвина).
# row='sex': Создание отдельных строк графиков для каждого уникального значения в 'sex' (пола пингвина).
facet_grid = sns.FacetGrid(data=df, col='species', row='sex')
# Отображение точечных диаграмм на каждой подграфике FacetGrid:
# sns.scatterplot: Функция построения графика.
# 'bill_depth_mm': Переменная для оси X каждой точечной диаграммы.
# 'bill_length_mm': Переменная для оси Y каждой точечной диаграммы.
facet_grid.map(sns.scatterplot, 'bill_depth_mm', 'bill_length_mm')
# Отображение графика
plt.show()
В следующем разделе вы узнаете, как добавить заголовок к точечной диаграмме в Seaborn.
Как добавить заголовок к точечному графику Seaborn в Python
Поскольку Seaborn построен на основе Matplotlib, мы можем использовать различные функции Matplotlib для настройки наших визуализаций. Например, мы можем добавить заголовок с помощью библиотеки Matplotlib. Это можно сделать, используя метод .title(), как показано ниже:
# Добавление заголовка к точечной диаграмме Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('penguins')
sns.scatterplot(data=df, x='bill_length_mm', y='bill_depth_mm', style='species', hue='species')
plt.title('Understanding Bill Depth and Length') # Добавление заголовка к графику
plt.show()
В следующем разделе вы узнаете, как добавить подписи осей к точечной диаграмме в Seaborn.
Как добавить подписи осей к точечному графику Seaborn в Python
Аналогично тому, как мы добавляли заголовок к графику в Seaborn, мы можем использовать библиотеку Matplotlib для добавления подписей к осям X и Y. Это можно сделать с помощью функций plt.xlabel() и plt.ylabel() соответственно.
Давайте посмотрим, как добавить подписи осей к нашему графику:
# Добавление подписей к осям нашей точечной диаграммы Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
# Загрузка встроенного датасета 'penguins' из библиотеки Seaborn
df = sns.load_dataset('penguins')
# Создание точечной диаграммы с цветом и стилем маркеров по виду пингвина
sns.scatterplot(data=df, x='bill_length_mm', y='bill_depth_mm', style='species', hue='species')
# Добавление подписи к оси X
plt.xlabel('Bill Length (mm)')
# Добавление подписи к оси Y
plt.ylabel('Bill Depth (mm)')
# Отображение графика
plt.show()
Заключение
В этой статье вы узнали, как использовать Seaborn для построения точечных диаграмм (scatter plots). Сначала вы научились создавать простые точечные графики и настраивать каждый аспект визуализации с помощью доступных параметров. Затем вы узнали, как изменять цвета, размеры и стили маркеров, а также как строить 3D-точечные диаграммы и добавлять линии регрессии.
Дополнительные ресурсы
Чтобы узнать больше по смежным темам, ознакомьтесь со следующими руководствами:
Добавление цвета с использованием непрерывных переменных в диаграммах рассеяния Сиборна