Seaborn.heatmap: примеры (PYTHON)
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') # Целочисленный формат для floatValueError: Unknown format code 'd' for object of type 'float'
Изменения в последних версиях
В версиях Seaborn начиная с 0.11.0 произошли изменения:
- Изменение цветовых палитр по умолчанию для лучшей читаемости.
- Добавление параметра linecolor для управления цветом линий между ячейками.
- Улучшение интеграции с matplotlib, стабильная работа с контекстными менеджерами стилей.
- Оптимизация производительности для больших матриц.
В версии 0.13.0 добавлена поддержка новых типов данных и улучшена обработка категориальных подписей.
Расширенные примеры
Пример с кластеризацией строк и столбцов:
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()[Кластеризованная тепловая карта с дендрограммами]
Кастомизация цветовой шкалы и добавление разделительных линий:
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()[Тепловая карта с тонкими серыми линиями и уменьшенной цветовой шкалой]
Использование пользовательской функции для аннотаций:
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]