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 и другие инструменты, вы можете добиться желаемого отображения данных, будь то числа, проценты, денежные единицы или даты и время. Помните о возможностях локализации для правильного отображения значений в разных регионах. Экспериментируйте с различными форматами, чтобы найти оптимальный вариант для ваших данных и целевой аудитории. 📈📊