2025, Nov 18 09:03

Как задать одинаковые деления и подписи на осях X и Y в Matplotlib

Короткий прием для Matplotlib: единая настройка делений и подписей на осях X и Y без повторов. Вынесем стиль в функцию, сократим код и избежим расхождений.

Когда оси X и Y используют одни и те же деления и подписи, четыре почти одинаковых вызова в Matplotlib быстро превращаются в шум. Задача — сохранить единый стиль графиков, сократить шаблонный код и сделать параметры оформления легко изменяемыми в одном месте.

Пример, где настройка делений повторяется

Ниже фрагмент кода с небольшим графиком: обе оси имеют одинаковые положения делений и те же подписи — жирные и небольшого размера.

import matplotlib.pyplot as mp
import seaborn as sb
mp.style.use('seaborn-v0_8')
canvas, axes = mp.subplots(figsize=(4, 4))
tick_vals = [0.00, 0.25, 0.50, 0.75, 1.00]
axes.set_xticks(tick_vals)
axes.set_xticklabels(tick_vals, weight='bold', size=8)
axes.set_yticks(tick_vals)
axes.set_yticklabels(tick_vals, weight='bold', size=8)
mp.show()

В чём суть проблемы

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

Лаконичное решение

Крошечная вспомогательная функция сохраняет ту же логику, но объединяет настройку. Она принимает объект осей, набор значений делений и любые параметры стилевого оформления через именованные аргументы, после чего применяет их к обеим осям.

import matplotlib.pyplot as mp
mp.style.use('seaborn-v0_8')
def apply_ticks_and_text(axis_obj, values, **opts):
    axis_obj.set_xticks(values)
    axis_obj.set_xticklabels(values, **opts)
    axis_obj.set_yticks(values)
    axis_obj.set_yticklabels(values, **opts)
canvas, axes = mp.subplots(figsize=(4, 4))
tick_vals = [0.00, 0.25, 0.50, 0.75, 1.00]
apply_ticks_and_text(axes, tick_vals, weight='bold', size=8)
mp.show()

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

Инкапсуляция уменьшает повторения и помогает держать код построения графиков в порядке. Когда меняются подписи или стиль, правки вносятся в одном-единственном месте. Это повышает читаемость, упрощает поддержание единообразного форматирования и снижает риск несовпадающих параметров между осями.

Итоги

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