Тепловая карта Seaborn: Полное руководство
Last updated
Last updated
Тепловые карты — ценные инструменты для быстрой визуализации больших объемов данных по шкале. В этом руководстве вы узнаете, как использовать Seaborn для создания красивых и информативных тепловых карт с помощью функции sns.heatmap()
. Seaborn делает создание тепловых карт невероятно простым и интуитивно понятным, позволяя вам настраивать их знакомой функцией.
К концу этого руководства вы узнаете следующее
Как использовать функцию sns.heatmap()
для создания тепловой карты в Seaborn
Как настроить тепловую карту с помощью цветов, интервалов и меток
Как изменить метки и заголовки вашей тепловой карты
Оглавление
Давайте рассмотрим, чему вы научитесь создавать в этом руководстве. На изображении ниже показан усеченный вид среднего температурного режима в Торонто, Канада, на протяжении года. Сразу же можно заметить несколько вещей, которые выделяют эту визуализацию:
Цвета используют традиционный переход от синего к красному для обозначения температуры.
Экстремальные значения отмечены на визуализации, что позволяет пользователям находить и идентифицировать максимальные и минимальные значения.
Значения являются квадратами и имеют легкую линию между ними, что делает визуализацию более чистой.
heatmap()
Давайте уделим время для изучения возможностей функции sns.heatmap()
. Существует множество параметров, которые позволяют настраивать вашу визуализацию. Мы не будем рассматривать все из них, но затронем самые важные.
Как видно из приведенного выше блока кода, существует множество различных параметров. Некоторые из наиболее важных параметров функции Seaborn heatmap()
включают в себя:
data=
относится к используемому DataFrame Pandas.
cmap=
позволяет настроить цветовую карту, используемую в визуализации
annot=
позволяет вам настраивать, следует ли аннотировать тепловую карту (или какие данные использовать для аннотирования)
square=
позволяет создавать квадратные значения на тепловой карте
Начнем с загрузки образца набора данных, который мы будем использовать на протяжении всего этого руководства.
Функция sns.heatmap()
отличается от многих других функций Seaborn тем, что она явно использует двумерный массив, такой как DataFrame. Вместо указания столбцов x=
и y=
, Seaborn будет использовать весь DataFrame.
В функции выше мы создаем DataFrame, который имеет строки для каждого месяца и столбцы для каждого дня месяца. Обратите внимание, что, чтобы создать прямоугольную тепловую карту, мы убираем дни больше 28. Это сделано только для иллюстрации и, конечно, создает некоторые общие проблемы с данными.
Функция heatmap()
из библиотеки Seaborn принимает 2-мерный DataFrame (или массив данных). Поэтому мы создали функцию, которая возвращает DataFrame с месяцами в виде строк и днями месяца в виде столбцов.
Чтобы создать тепловую карту в Seaborn, мы можем просто передать этот DataFrame в функцию sns.heatmap()
. Seaborn автоматически определит многие аспекты данных, параметры которых вы научитесь настраивать позднее в этом руководстве.
Во введённом выше блоке кода мы загрузили наши библиотеки, которые в данном случае включали Seaborn, Matplotlib и Pandas. Затем мы загрузили наш DataFrame, используя созданную ранее пользовательскую функцию.
Наконец, мы передали DataFrame в функцию sns.heatmap()
, которая вернула объект осей. Затем мы можем отобразить график с помощью функции plt.show()
Это возвращает изображение
Мы можем сразу увидеть тенденции в данных. Однако мы действительно можем развивать то, что у нас есть, и настраивать визуализацию, чтобы сделать её ещё более понятной. Давайте начнем с изучения настройки цветовой карты, используемой в визуализации.
Seaborn предоставляет несколько встроенных цветовых карт и позволяет создавать свои собственные. **Для передачи другой цветовой карты можно использовать параметр cmap=
, который принимает цветовую карту Seaborn в качестве входных данных.
Обычно температуры изображаются от синего к красному, где синий - это холодная, а красный - горячая. Seaborn предоставляет цветовую палитру, которая делает именно это! Давайте посмотрим, как можно использовать цветовую палитру 'coolwarm'
для изменения цветов нашей тепловой карты.
В кодовом блоке выше мы использовали тот же код, что и раньше, только передали дополнительный параметр cmap
. Это приводит к появлению изображения ниже:
На изображении выше видно, что к нашей тепловой карте теперь применена новая цветовая схема. Это позволяет лучше визуализировать, какие дни были холоднее, а какие — теплее.
Another common task is converting each item in the heatmap to be of a square format. This can be done by passing in square=True
into the sns.heatmap()
function.
Ещё одна распространенная задача — преобразование каждого элемента тепловой карты в квадратный формат. Это можно сделать, передав square=True
в функцию sns.heatmap()
.
Отображение элементов в виде квадратов может быть очень полезным для создания более равномерно распределенного визуального эффекта. Давайте посмотрим, как это выглядит на Python:
В приведенном выше блоке кода мы снова изменили вызов функции sns.heatmap()
— указав Seaborn отображать значения в виде квадратов. Это вернуло:
Мы видим, что теперь все значения представлены в виде квадратов. Однако это также изменило размер самой тепловой карты. В следующем разделе вы узнаете, как изменить размер графика тепловой карты Seaborn.
Аргумент figsize=
в функции subplots()
Функция heatmap()
из Seaborn возвращает объект axes из Matplotlib. Благодаря этому, мы можем изменить размер исходного объекта фигуры, используя Matplotlib.
Давайте рассмотрим, как можно изменить размер тепловой карты (heatmap).
В кодовом блоке выше мы используем функцию subplots()
из Matplotlib для создания фигуры и объекта осей. В данном случае мы указали размер 14 на 6 дюймов.
Поскольку Seaborn работает с активной осью, нам не нужно указывать это явно. Однако, если вы работаете с несколькими осями, вы можете передать это в параметр ax=
функции sns.heatmap()
Это возвращает:
Теперь тепловая карта более эффективно заполняет визуализацию, что позволяет лучше понять распределение цветов. Давайте посмотрим, как можно добавить метки к графикам.
Добавление меток может быть информативным способом улучшить вашу тепловую карту. Seaborn предоставляет два способа добавления меток к тепловой карте, используя параметр annot=
Используя булево значение, функция будет использовать значения из DataFrame, который передан в функцию
Используя отдельный набор данных, вы можете построить графики с разными метками
Давайте сначала посмотрим, как мы можем добавить метки к нашему текущему DataFrame
В приведенном выше коде мы указали annot=True
. Это указывает Seaborn использовать метки из DataFrame, который используется для самого теплового графика. Это выводит изображение ниже:
На изображении выше видно, что некоторые значения представлены в виде целых чисел, а другие — в виде чисел с плавающей точкой. Seaborn позволяет применять строковое форматирование к значениям на тепловой карте, чему вы научитесь в следующем разделе.
Seaborn позволяет применять пользовательское форматирование строк к создаваемым им меткам. Для этого можно использовать параметр fmt=
, который использует стандартное форматирование чисел.
Если мы хотим убедиться, что все наши значения отображаются в виде целых чисел, мы можем использовать строковое форматирование ',.0f'
. Это позволит использовать запятые для разделения тысяч и обеспечит отсутствие значений после десятичных.
В коде выше мы добавили fmt=',.0f'
, что указывает Seaborn округлить значения до целых, как показано ниже:
На изображении ниже теперь видно, что все метки обозначены последовательно. Однако они могут отвлекать и отнимать внимание от самого изображения. Давайте посмотрим, как мы можем настроить их дальше.
Seaborn предоставляет обширные возможности для форматирования аннотаций на тепловой карте. Чтобы форматировать аннотации на тепловой карте Seaborn, вы можете использовать параметр annot_kws=
, который позволяет применять любые ключевые слова из объекта текста Matplotlib
Давайте посмотрим, как мы можем изменить размер и прозрачность этих значений:
Во фрагменте кода выше, Seaborn был настроен на использование размера 'x-small'
и значения прозрачности 0.25
. Это возвращает изображение ниже:
Мы видим, что текст был отформатирован. Хотя его немного сложнее читать и он, вероятно, менее доступен, он дает представление о значениях, не отвлекая внимание.
Мы можем дополнительно настроить метки в тепловой карте Seaborn, передав отдельный набор значений для использования. Мы можем передать отдельный набор меток в тепловую карту, используя параметр annot=
.
Давайте рассмотрим, как мы можем выделить только минимальные и максимальные значения на тепловой карте:
Мы внесли несколько изменений в блок кода выше:
Мы создали кортеж значений, содержащий максимальные и минимальные значения
Затем мы использовали .applymap()
, чтобы применить пользовательскую lambda-функцию ко всему DataFrame. Функция проверяет, является ли значение одним из крайних значений. Если да, то возвращает число, иначе возвращает пустое значение.
Мы передаем наш новый DataFrame в параметр annot=
. Также необходимо передать fmt=''
, так как функция ожидает числовые метки.
Это возвращает изображение ниже:
Мы видим, что это возвращает тепловую карту, где отмечены только наивысшие и наинизшие значения.
Мы можем дополнительно настроить наши тепловые карты, добавив линии для разделения каждого элемента. С помощью параметра linewidths=
вы можете добавить линию указанной ширины для разделения каждого элемента в тепловой карте Seaborn.
Давайте посмотрим, как можно добавить линию для разделения элементов в визуализации:
В кодовом блоке выше мы добавили linewidths=0.5
, чтобы использовать ширину 0.5 для разделения линий.
Это делает каждый элемент немного более отличительным, что упрощает различение общих значений
Чтобы передать пользовательские метки делений в тепловую карту Seaborn, вы можете использовать параметр yticklabels=
(или xticklabels=
).
Давайте посмотрим, как можно настроить ось Y, чтобы использовать сокращённое имя месяца, а не номер месяца. Для этого мы будем использовать модуль calendar
и извлекать первые три буквы названия месяца с помощью генераторов списков в Python.
Давайте разберем, что мы сделали в кодовом блоке выше:
Мы импортировали модуль календаря
Мы создали список имён, используя генератор списка, который берёт первые три буквы из названия каждого месяца.
Мы затем передали этот список в параметр yticklabels=
, чтобы применить эти метки к нашей тепловой карте.
Это вернуло изображение ниже:
Мы видим, что это делает визуализацию значительно чище и легче для понимания.
В текущем визуализированном изображении шкала цвета слишком большая. **Мы можем легко настроить шкалу цвета тепловой карты Seaborn, используя параметр cbar_kws=
, который принимает аргументы из функции цветовой шкалы Matplotlib.
Давайте посмотрим, как мы можем уменьшить цветовую шкалу, используя параметр shrink
.
В приведенном выше блоке кода мы добавили cbar_kws={"shrink": 0.8}
, что уменьшает размер цветовой шкалы на 20%. Это позволяет шкале идеально соответствовать высоте тепловой карты, как показано ниже
Процесс подбора размера цветовой шкалы может быть немного эвристичным. Поэтому важно поиграться с параметрами, чтобы найти наилучший размер.
Мы также можем переместить метки тепловой карты наверх визуализации, используя метод ax.xaxis.tick_top()
. Поскольку функция heatmap()
возвращает объект осей Matplotlib, мы можем использовать методы осей, доступные в Matplotlib.
Чтобы переместить метки оси на верх, мы можем просто вызвать ax.xaxis.tick_top()
, что перемещает все метки оси x наверх визуализации.
Этот выводит изображение ниже, на котором значения за день перемещены в верхнюю часть визуализации.
В следующем разделе вы узнаете, как изменить разброс тепловой карты Seaborn.
На данный момент в этом руководстве мы позволяли Seaborn настраивать распределение цветовой карты, которую он генерирует. Для настройки минимальных и максимальных значений, используемых в тепловой карте, мы можем использовать параметры vmax=
и vmin=
.
Это может быть особенно полезно для предотвращения влияния экстремальных значений на тепловую карту. Давайте посмотрим, как мы можем настроить разброс наших значений:
В коде выше мы использовали положительные и отрицательные значения из кортежа экстремальных значений. Здесь важно быть внимательными, чтобы случайно не обрезать значения. Этот процесс работает с текущим набором данных, потому что абсолютное значение нашей высокой температуры больше, чем низкой температуры.
В изображении ниже нуль выбран в качестве середины, так как он находится между самыми высокими и низкими значениями. Это позволяет лучше понять изображение, поскольку холодные значения ниже нуля.
В заключительном разделе вы узнаете, как настроить визуализацию, добавив заголовок и подписи к осям.
Seaborn предоставляет значительные возможности для добавления заголовков и подписей осей к визуализации. В этом разделе вы узнаете, как добавить заголовок и изменить подписи осей на тепловой карте. Это можно сделать с помощью следующих методов осей:
.set_title()
установит заголовок тепловой карты
.set_xaxis()
и .set_yaxis()
установят метки оси x и оси y соответственно.
Чтобы это сработало, нам сначала нужно создать явный объект осей. До сих пор мы работали с неявным объектом осей, но для применения этих методов нам нужен объявленный объект.
В приведенном выше блоке кода мы добавили заголовок и подписи к осям. Мы также смогли применить стилизацию, используя аргумент ключевого слова weight=
, что привело к следующей визуализации:
Добавив заголовок и изменив подписи осей, наша визуализация данных становится гораздо проще для понимания.
Тепловые карты — это ценные инструменты для быстрой визуализации больших объемов данных по шкале. В этом руководстве вы узнаете, как использовать Seaborn для создания красивых и информативных тепловых карт с помощью функции sns.heatmap()
. Seaborn делает процесс создания тепловых карт невероятно простым и интуитивно понятным, что позволяет вам настраивать их с помощью знакомой функции.
В этом руководстве вы сначала узнали, как создать простую тепловую карту с использованием Seaborn. Затем мы улучшили эту простую тепловую карту, настраивая её шаг за шагом, чтобы получить красивую визуализацию.
Для получения дополнительной информации по связанным темам, ознакомьтесь с ресурсами ниже:
Seaborn на Python для визуализации данных
Вычислить и построить матрицу корреляции в Python и Pandas
Диаграммы рассеяния Seaborn в Python: полное руководство
Создание парных графиков в Seaborn с помощью sns pairplot
Из-за этого давайте создадим индивидуальную DataFrame. Мы будем использовать набор данных, содержащий среднюю дневную температуру Торонто, Канада, в 2020 году, который вы . Ниже представлена функция read_data()
, которая возвращает DataFrame в нужном нам формате.