Matplotlib: Как Отключить Научный Формат Ось Y и Настроить Числовое Отображение

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

Почему Matplotlib Использует Научный Формат?

Автоматическое масштабирование осей и выбор формата

Matplotlib автоматически масштабирует оси и выбирает формат отображения чисел, чтобы избежать переполнения тиков (меток) оси. Если диапазон значений на оси Y очень большой (например, от 0.00001 до 1000000), научный формат позволяет компактно представить эти значения. Этот механизм предназначен для обеспечения читаемости графика, однако иногда он может быть избыточным или даже мешать восприятию данных.

Когда научный формат уместен и когда его следует избегать

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

Отключение Научного Формата на Оси Y с Помощью ScalarFormatter

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

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

Пример кода: отключаем научный формат и показываем целые числа

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

# Создаем данные для примера
x = np.arange(0, 10, 0.1)
y = np.exp(x/2)

# Создаем график
fig, ax = plt.subplots()
ax.plot(x, y)

# Отключаем научный формат на оси Y
ax.yaxis.set_major_formatter(ticker.ScalarFormatter(useOffset=False))
ax.ticklabel_format(style='plain', axis='y', scilimits=(0,0))

# Отображаем график
plt.show()

В этом примере useOffset=False отключает добавление смещения к тикам оси Y, что может быть полезно для улучшения читаемости.

Более Тонкая Настройка: FormatStrFormatter и FuncFormatter

FormatStrFormatter: форматирование с использованием строк формата

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

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

# Создаем данные для примера
x = np.arange(0, 10, 0.1)
y = np.exp(x/2)

# Создаем график
fig, ax = plt.subplots()
ax.plot(x, y)

# Форматируем ось Y с двумя знаками после запятой
formatter = ticker.FormatStrFormatter('%.2f')
ax.yaxis.set_major_formatter(formatter)

# Отображаем график
plt.show()
Реклама

'%.2f' – это строка формата, которая указывает, что число должно быть отображено с двумя знаками после запятой.

FuncFormatter: гибкое форматирование с использованием пользовательских функций

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

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

# Создаем данные для примера
x = np.arange(0, 10, 0.1)
y = np.exp(x/2)

# Создаем график
fig, ax = plt.subplots()
ax.plot(x, y)

# Создаем функцию для форматирования оси Y
def format_func(value, tick_number):
    # Возвращаем значение, умноженное на 1000, и добавляем символ 'K'
    return f'{value * 1000:.0f}K'

# Применяем FuncFormatter к оси Y
ax.yaxis.set_major_formatter(ticker.FuncFormatter(format_func))

# Отображаем график
plt.show()

В этом примере пользовательская функция умножает каждое значение на 1000 и добавляет символ ‘K’ (например, для отображения тысяч).

Продвинутые Приемы Форматирования Оси Y

Изменение количества знаков после запятой

Как было показано выше, FormatStrFormatter позволяет легко контролировать количество знаков после запятой. Например, '%.3f' отобразит числа с тремя знаками после запятой.

Использование локализованных форматов чисел (например, для отображения тысяч)

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

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

# Устанавливаем локаль (например, для Германии)
locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')

# Создаем данные для примера
x = np.arange(0, 10, 0.1)
y = np.exp(x/2) * 1000

# Создаем график
fig, ax = plt.subplots()
ax.plot(x, y)

# Создаем функцию для форматирования оси Y с учетом локали
def format_func(value, tick_number):
    return locale.format_string('%.0f', value, grouping=True)

# Применяем FuncFormatter к оси Y
ax.yaxis.set_major_formatter(ticker.FuncFormatter(format_func))

# Отображаем график
plt.show()

В этом примере используется немецкая локаль (de_DE.UTF-8), чтобы отображать тысячи с использованием точек.

Заключение

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


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