Форматирование чисел с плавающей точкой на осях Matplotlib: Полное руководство

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

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

Обзор структуры осей Matplotlib и основные объекты для форматирования

В Matplotlib оси (Axes) – это объекты, определяющие систему координат графика. Форматирование осей включает в себя настройку отображения делений (ticks) и их подписей (tick labels). Основные объекты, участвующие в форматировании:

  • Axes.xaxis и Axes.yaxis: Объекты, представляющие оси X и Y соответственно.

  • matplotlib.ticker.Formatter: Базовый класс для форматирования подписей делений.

  • matplotlib.ticker.Locator: Определяет расположение делений на оси.

Встроенные классы Formatter: ScalarFormatter, FormatStrFormatter и их возможности

Matplotlib предоставляет несколько встроенных классов Formatter для упрощения форматирования чисел:

  • ScalarFormatter: Форматирует числа в обычном десятичном формате.

  • FormatStrFormatter: Использует форматные строки Python для форматирования чисел.

Пример использования ScalarFormatter (обычно используется по умолчанию):

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

fig, ax = plt.subplots()
ax.plot(np.arange(0, 1, 0.01))
ax.yaxis.set_major_formatter(ScalarFormatter(useMathText=True))
plt.show()

Использование FormatStrFormatter для простой настройки

Применение форматных строк Python для управления отображением чисел

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

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

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

fig, ax = plt.subplots()
ax.plot(np.arange(0, 1, 0.01))
ax.yaxis.set_major_formatter(FormatStrFormatter('%.2f')) # Два знака после запятой
ax.xaxis.set_major_formatter(FormatStrFormatter('%d')) # Целые числа
plt.show()

В этом примере %.2f указывает на отображение чисел с двумя знаками после запятой. %d отображает целые числа. Можно добавлять префиксы и суффиксы:

ax.yaxis.set_major_formatter(FormatStrFormatter('Value: %.2f'))

Продвинутое форматирование с FuncFormatter

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

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

Реклама

Примеры сложного форматирования: условное отображение, округление и преобразование значений

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

def format_func(value, tick_number):
    # Возвращает значение в тысячах
    return f'{value / 1000:.1f}k'

fig, ax = plt.subplots()
ax.plot(np.arange(0, 10000, 100))
ax.yaxis.set_major_formatter(FuncFormatter(format_func))
plt.show()

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

Специальные случаи и лучшие практики

Форматирование чисел в научной нотации (экспоненциальный формат)

Для отображения очень больших или очень маленьких чисел удобно использовать научную нотацию. Matplotlib предоставляет несколько способов для этого.

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

fig, ax = plt.subplots()
ax.plot(np.arange(1e-6, 1e-5, 1e-7))
formatter = ScalarFormatter(useMathText=True)
formatter.set_powerlimits((-6,6))
ax.yaxis.set_major_formatter(formatter)
plt.show()

useMathText=True включает отображение экспоненциальной части в формате LaTeX. set_powerlimits((-6, 6)) определяет диапазон значений, для которых научная нотация будет использоваться.

Решение распространенных проблем и советы по улучшению читаемости графиков

  • Перекрытие подписей: Используйте plt.xticks(rotation=45) или plt.yticks(rotation=45) для поворота подписей.

  • Недостаточная точность: Увеличьте количество знаков после запятой с помощью FormatStrFormatter('%.3f').

  • Слишком много знаков после запятой: Уменьшите количество знаков после запятой.

  • Использование matplotlib.ticker.MaxNLocator: Для автоматического выбора оптимального числа делений на оси.

  • Обработка NaN и бесконечностей: Убедитесь, что ваш форматер корректно обрабатывает NaN (Not a Number) и бесконечные значения, если они присутствуют в ваших данных.

Заключение

Форматирование чисел на осях Matplotlib – важный шаг к созданию качественных и понятных визуализаций. Используйте встроенные классы Formatter для простых задач и FuncFormatter для более сложной настройки. Обратите внимание на научную нотацию и решайте распространенные проблемы с перекрытием подписей и точностью. Правильное форматирование позволит вашим графикам передавать информацию эффективно и точно. 🎉


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