Форматирование меток делений оси Y в Matplotlib: Руководство для Python-разработчиков

Matplotlib – мощная библиотека для визуализации данных в Python. Одной из ключевых задач при создании информативных графиков является правильное форматирование меток на осях, особенно на оси Y. В этом руководстве мы рассмотрим различные способы форматирования меток делений оси Y, от простых числовых значений до дат, времени, процентов и денежных единиц. Мы предоставим примеры кода, которые помогут вам настроить отображение меток в соответствии с вашими потребностями.

Основы форматирования меток оси Y в Matplotlib

Обзор основных инструментов и классов для форматирования меток (FuncFormatter, ScalarFormatter, StrMethodFormatter)

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

  • FuncFormatter: Самый гибкий инструмент, позволяющий использовать произвольную функцию для форматирования значения метки.

  • ScalarFormatter: Специализирован для форматирования числовых значений, предоставляет контроль над количеством знаков после запятой и использованием научной нотации.

  • StrMethodFormatter: Позволяет форматировать метки с использованием строковых методов, таких как str.format().

Настройка основных параметров меток: шрифт, размер, цвет, угол наклона

Для настройки внешнего вида меток оси Y можно использовать методы объекта Axes:

  • ax.tick_params(axis='y', ...): Для настройки параметров меток, таких как размер, цвет и направление.

  • ax.set_yticklabels(labels, ...): Для установки текста меток, позволяя настроить шрифт, размер и другие параметры.

Пример:

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()
ax.plot(np.arange(10), np.arange(10))

ax.tick_params(axis='y', labelsize=12, labelcolor='red', rotation=45)

plt.show()

Форматирование числовых значений на оси Y

Использование FuncFormatter для базового форматирования чисел

FuncFormatter позволяет применять произвольную функцию к значениям меток. Это полезно для выполнения базового форматирования, такого как добавление префиксов или суффиксов.

Пример:

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as np

fig, ax = plt.subplots()
ax.plot(np.arange(10), np.arange(10) * 1000)

def thousands(x, pos):
    return f'{x/1000}k'

formatter = ticker.FuncFormatter(thousands)
ax.yaxis.set_major_formatter(formatter)

plt.show()

Применение ScalarFormatter для контроля над количеством знаков после запятой

ScalarFormatter обеспечивает более точный контроль над форматированием чисел, особенно когда речь идет о количестве знаков после запятой или использовании научной нотации.

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as np

fig, ax = plt.subplots()
ax.plot(np.arange(10), np.arange(10) / 3)

formatter = ticker.ScalarFormatter(useMathText=True)
formatter.set_scientific(False)
formatter.set_useOffset(False)
ax.yaxis.set_major_formatter(formatter)

plt.show()

Отображение процентов на оси Y

Использование FuncFormatter для добавления знака процента

Чтобы отобразить значения на оси Y в процентах, можно использовать FuncFormatter для добавления знака процента.

Реклама
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as np

fig, ax = plt.subplots()
ax.plot(np.arange(10), np.arange(10) / 100)

def percent(x, pos):
    return f'{x*100}%'

formatter = ticker.FuncFormatter(percent)
ax.yaxis.set_major_formatter(formatter)

plt.show()

Настройка отображения десятичных знаков для процентов

Чтобы настроить количество десятичных знаков, можно использовать f-strings или другие методы форматирования строк.

def percent(x, pos):
    return f'{x*100:.1f}%' # Один знак после запятой

Форматирование денежных единиц на оси Y

Применение FuncFormatter для добавления символов валют ($, €, ₽ и т.д.)

Аналогично процентам, FuncFormatter позволяет добавлять символы валют.

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as np

fig, ax = plt.subplots()
ax.plot(np.arange(10), np.arange(10) * 100)

def currency(x, pos):
    return f'${x}'

formatter = ticker.FuncFormatter(currency)
ax.yaxis.set_major_formatter(formatter)

plt.show()

Использование локализации для правильного отображения денежных значений (разделители тысяч и т.д.)

Для правильного отображения денежных значений с разделителями тысяч и десятичными знаками, рекомендуется использовать модуль locale.

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as np
import locale

locale.setlocale(locale.LC_ALL, 'ru_RU.UTF-8') # Или другая локаль

fig, ax = plt.subplots()
ax.plot(np.arange(10), np.arange(10) * 10000)

def currency(x, pos):
    return locale.currency(x, grouping=True)

formatter = ticker.FuncFormatter(currency)
ax.yaxis.set_major_formatter(formatter)

plt.show()

Форматирование дат и времени на оси Y

Использование mdates.DateFormatter для форматирования дат

Для форматирования дат на оси Y используется класс mdates.DateFormatter из модуля matplotlib.dates.

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime
import numpy as np

fig, ax = plt.subplots()
dates = [datetime.datetime(2023, 1, 1) + datetime.timedelta(days=i) for i in range(10)]
values = np.arange(10)
ax.plot(dates, values)

date_format = mdates.DateFormatter('%Y-%m-%d')
ax.yaxis.set_major_formatter(date_format)

fig.autofmt_xdate()
plt.show()

Настройка форматов даты и времени в соответствии с требуемым отображением

Формат даты и времени задается с помощью директив, описанных в документации Python по strftime и strptime.

Примеры:

  • %Y: Год с указанием века (например, 2023)

  • %m: Номер месяца (01-12)

  • %d: День месяца (01-31)

  • %H: Час (00-23)

  • %M: Минута (00-59)

  • %S: Секунда (00-59)

Заключение

Форматирование меток оси Y в Matplotlib – важный аспект создания профессиональных и понятных графиков. Используя FuncFormatter, ScalarFormatter, DateFormatter и другие инструменты, вы можете добиться желаемого отображения данных, будь то числа, проценты, денежные единицы или даты и время. Помните о возможностях локализации для правильного отображения значений в разных регионах. Экспериментируйте с различными форматами, чтобы найти оптимальный вариант для ваших данных и целевой аудитории. 📈📊


Добавить комментарий