2025, Dec 21 12:01

Как исправить смещение подписей оси X на тепловой карте в Python‑в‑Excel

Почему на тепловой карте в Python‑в‑Excel подписи оси X выглядят смещёнными и как это исправить. Пошагово: выравнивание вправо, настройка seaborn, пример.

Тепловые карты удобны для быстрого просмотра закономерностей по именам и неделям, но подписи осей иногда подводят. В связке Python‑в‑Excel вы ожидаете увидеть на оси X Week1, Week2 и т. д., а вместо этого попадаются числа или подписи, будто смещённые. Хорошая новость: если данные и подписи заданы корректно, чаще всего это просто визуальный эффект выравнивания, а не ошибка данных или построения графика.

Пример настройки

Рассмотрим тепловую карту из диапазона, где в первом столбце — имена, а в последующих — недели. Цель — отложить недели по оси X, а имена — по оси Y.

import pandas as pnd
import matplotlib.pyplot as mplt
import seaborn as sbrn
# Считать диапазон из Excel (имена в первом столбце, недели по горизонтали)
data_block = xl("W142:CH166")
# Использовать первый столбец как индекс (метки имён)
data_block.set_index(data_block.columns[0], inplace=True)
# Преобразовать ячейки в числовой формат
data_block = data_block.apply(pnd.to_numeric, errors='coerce')
# Удалить пустые строки и строки, состоящие только из нулей
data_block = data_block.dropna(how='all')
data_block = data_block[(data_block != 0).any(axis=1)]
# Преобразовать названия столбцов в строки для построения графика
data_block.columns = data_block.columns.astype(str)
# Построить тепловую карту
mplt.figure(figsize=(50, 5), dpi=100)
sbrn.heatmap(data_block, cmap='Blues', annot=False, linewidths=0.5, linecolor='white')
# Задать подписи оси X
mplt.xticks(ticks=range(len(data_block.columns)), labels=data_block.columns, rotation=45)
mplt.yticks(rotation=0)
mplt.title('Heat Map of Wine Sales Over Time')
mplt.show()

Что на самом деле происходит

Ось не смещена, и ваши недели на месте. Подписи присутствуют, но когда текст центрируется относительно делений, взгляд может считывать их как относящиеся к следующей ячейке сетки. Это ощущение «сдвига» создаёт впечатление, что ось показывает числа или неверные подписи, хотя данные и деления выставлены правильно.

Как исправить

Выровняйте подписи оси X по правому краю. Повернутые подписи, выровненные вправо, визуально оказываются под нужными ячейками сетки, убирая иллюзию смещения. Никаких других структурных изменений не требуется.

import pandas as pnd
import matplotlib.pyplot as mplt
import seaborn as sbrn
data_block = xl("W142:CH166")
data_block.set_index(data_block.columns[0], inplace=True)
data_block = data_block.apply(pnd.to_numeric, errors='coerce')
data_block = data_block.dropna(how='all')
data_block = data_block[(data_block != 0).any(axis=1)]
data_block.columns = data_block.columns.astype(str)
mplt.figure(figsize=(50, 5), dpi=100)
sbrn.heatmap(data_block, cmap='Blues', annot=False, linewidths=0.5, linecolor='white')
# Выровнять подписи вправо, чтобы убрать визуальное смещение
mplt.xticks(ticks=range(len(data_block.columns)), labels=data_block.columns, rotation=45, ha='right')
mplt.yticks(rotation=0)
mplt.title('Heat Map of Wine Sales Over Time')
mplt.show()

Почему это важно

Пользы от визуализации столько же, сколько в ней читаемости. Когда подписи выглядят «не на месте», доверие к графику падает, даже если данные верны. В компактных представлениях вроде тепловых карт мелкие детали оформления — выравнивание и поворот подписей делений — определяют, получите ли вы быстрый инсайт или путаницу. Стабильный пайплайн — индексирование по первому столбцу, приведение к числу, удаление пустых строк и использование строковых названий столбцов — помогает сохранить логику построения неизменной, пока вы доводите подачу.

Вывод

Если на оси X вашей тепловой карты вместо названий недель появляются числа, сначала проверьте выравнивание подписей, а уже потом меняйте данные или структуру графика. Переведите горизонтальное выравнивание повернутых подписей вправо — и ожидаемое соответствие между подписями и ячейками вернётся. Остальные этапы преобразований оставьте как есть и сосредоточьтесь на размещении подписей, чтобы получить ясную и надёжную картину недельных тенденций.