Seaborn.heatmap: примеры (PYTHON)

Визуализация данных с помощью тепловых карт в Seaborn
Раздел: Визуализация, Тепловые карты
seaborn.heatmap(data: rectangular dataset, **kwargs: Any): matplotlib.axes.Axes

Функция seaborn.heatmap

Функция seaborn.heatmap предназначена для визуализации матричных данных в виде тепловой карты, где значения матрицы представлены цветами. Использование функции распространено в анализе данных, машинном обучении и исследовании корреляций для наглядного представления матриц, матриц ошибок, корреляционных матриц или сводных таблиц.

Основные аргументы функции:

  • data: двумерная структура данных (массив, DataFrame или матрица), обязательный аргумент.
  • vmin, vmax: значения для определения границ цветовой шкалы.
  • cmap: цветовая карта для отображения данных.
  • center: значение для центрирования цветовой карты при использовании расходящейся палитры.
  • robust: использование устойчивых квантилей для определения границ цветовой шкалы.
  • annot: отображение числовых значений в ячейках.
  • fmt: формат строки для аннотаций.
  • annot_kws: дополнительные параметры для настройки аннотаций.
  • linewidths: ширина линий между ячейками.
  • linecolor: цвет линий между ячейками.
  • cbar: отображение цветовой шкалы.
  • cbar_kws: дополнительные параметры для настройки цветовой шкалы.
  • cbar_ax: ось для размещения цветовой шкалы.
  • square
  • xticklabels, yticklabels: управление подписями осей.
  • mask: маска для скрытия части ячеек.
  • ax: объект осей matplotlib для отрисовки графика.
  • kwargs: дополнительные аргументы для передачи в matplotlib pcolor.

Функция возвращает объект matplotlib.axes._subplots.AxesSubplot, что позволяет дальнейшую настройку графика.

Примеры использования heatmap

Базовый пример с корреляционной матрицей:

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

# Создание корреляционной матрицы
corr_matrix = np.random.randn(10, 10)
corr_matrix = np.corrcoef(corr_matrix)

# Построение тепловой карты
sns.heatmap(corr_matrix)
plt.show()
[График: тепловая карта 10x10 с цветовой шкалой]

Использование аннотаций и маски для верхнего треугольника:

mask = np.triu(np.ones_like(corr_matrix, dtype=bool))
sns.heatmap(corr_matrix, mask=mask, annot=True, fmt=".2f", cmap='coolwarm', center=0)
plt.show()
[График: тепловая карта с аннотациями значений, скрытым верхним треугольником и расходящейся цветовой картой]

Похожие функции в Python

Для визуализации матричных данных в Python используют несколько альтернатив:

  • matplotlib.pyplot.imshow: базовая функция для отображения данных как изображения. Предпочтительнее для работы с пиксельными данными или когда требуется низкоуровневый контроль.
  • matplotlib.pyplot.pcolor и pcolormesh: создают псевдоцветные графики с произвольной сеткой. Используют при неравномерной сетке данных.
  • pandas.DataFrame.style.background_gradient: встроенная в pandas стилизация для отображения в Jupyter Notebook. Применяют для быстрой интерактивной визуализации прямо в таблицах.
  • plotly.express.imshow: функция из интерактивной библиотеки Plotly. Выбор при необходимости создания интерактивных тепловых карт с возможностью масштабирования.

Типичные ошибки

При использовании функции встречаются несколько распространенных ошибок:

  • Неправильная форма данных: передача одномерного массива вместо двумерного.
import seaborn as sns
import numpy as np
data = np.random.rand(25)  # Одномерный массив
sns.heatmap(data)  # Ошибка
ValueError: Expected 2D array, got 1D array instead
  • Несовместимость маски: маска должна иметь ту же форму, что и данные, и быть булевой.
data = np.random.rand(5,5)
mask = np.zeros((5,5))  # Не булева маска
sns.heatmap(data, mask=mask)
TypeError: bool() argument must be a string, a number, or...
  • Проблемы с аннотациями: передача неформатируемых значений без указания строкового формата.
data = np.random.rand(3,3)
sns.heatmap(data, annot=True, fmt='d')  # Целочисленный формат для float
ValueError: Unknown format code 'd' for object of type 'float'

Изменения в последних версиях

В версиях Seaborn начиная с 0.11.0 произошли изменения:

  • Изменение цветовых палитр по умолчанию для лучшей читаемости.
  • Добавление параметра linecolor для управления цветом линий между ячейками.
  • Улучшение интеграции с matplotlib, стабильная работа с контекстными менеджерами стилей.
  • Оптимизация производительности для больших матриц.

В версии 0.13.0 добавлена поддержка новых типов данных и улучшена обработка категориальных подписей.

Расширенные примеры

Пример с кластеризацией строк и столбцов:

Пример python
import seaborn as sns
import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import linkage

flights = sns.load_dataset("flights")
flights_pivot = flights.pivot("month", "year", "passengers")

# Кластеризация
row_linkage = linkage(flights_pivot.values, method='average')
col_linkage = linkage(flights_pivot.values.T, method='average')

sns.clustermap(flights_pivot, row_linkage=row_linkage, col_linkage=col_linkage, cmap="YlGnBu")
plt.show()
[Кластеризованная тепловая карта с дендрограммами]

Кастомизация цветовой шкалы и добавление разделительных линий:

Пример python
data = np.random.randn(8, 10)
ax = sns.heatmap(data, cmap="vlag", center=0,
                 cbar_kws={"shrink": 0.8, "label": "Значение"},
                 linewidths=.5, linecolor='gray')
ax.set_title("Тепловая карта с кастомизированной цветовой шкалой")
plt.show()
[Тепловая карта с тонкими серыми линиями и уменьшенной цветовой шкалой]

Использование пользовательской функции для аннотаций:

Пример python
def custom_annot(val, threshold=0.5):
    return "HIGH" if val > threshold else "LOW"

data = np.random.rand(6, 6)
annot_data = np.vectorize(custom_annot)(data)
sns.heatmap(data, annot=annot_data, fmt="", cmap="Blues")
plt.show()
[Тепловая карта с текстовыми аннотациями "HIGH" и "LOW"]

Альтернативы в других языках программирования

В других языках программирования существуют библиотеки для построения тепловых карт:

  • JavaScript (Chart.js): библиотека для построения графиков в браузере. Пример тепловой карты с использованием плагина:
// Установка: npm install chart.js chartjs-plugin-heatmap
const ctx = document.getElementById('myChart').getContext('2d');
const chart = new Chart(ctx, {
    type: 'heatmap',
    data: {
        datasets: [{
            data: [{x:0,y:0,value:10}, {x:1,y:0,value:20}],
        }]
    },
    options: {}
});
[Интерактивная тепловая карта в HTML]
  • R (ggplot2 с geom_tile): язык для статистической графики. Пример:
library(ggplot2)
df <- expand.grid(X = 1:10, Y = 1:10)
df$Value <- rnorm(100)
ggplot(df, aes(X, Y, fill = Value)) + geom_tile()
[Тепловая карта в графической системе R]
  • Julia (Plots.jl с heatmap): высокопроизводительный язык. Пример:
using Plots
heatmap(rand(10,10))
[Тепловая карта в Julia]

питон seaborn.heatmap function comments

En
Seaborn.heatmap Plot rectangular data as a color-encoded matrix