Matplotlib: Преобразование десятичных дробей в проценты для визуализации данных – подробное руководство

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

Зачем преобразовывать десятичные дроби в проценты в Matplotlib?

Важность отображения данных в процентном формате для наглядности

Представление данных в процентах часто улучшает восприятие информации. Вместо отображения десятичных значений (например, 0.65) отображение процентов (65%) интуитивно понятнее для широкой аудитории.

Примеры ситуаций, когда проценты предпочтительнее (доли, рейтинги, сравнения)

Процентный формат особенно полезен в следующих ситуациях:

  • Доли: Отображение доли чего-либо от целого.

  • Рейтинги: Представление рейтингов в процентах для лучшего понимания.

  • Сравнения: Сравнение различных категорий или групп в процентном отношении.

  • Круговые диаграммы и гистограммы: Отображение процентного соотношения категорий.

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

Краткий обзор основных объектов для работы с осями (axis)

В Matplotlib оси (axis) графиков представлены объектами, предоставляющими методы для управления их видом и поведением. Основные методы включают:

  • set_major_formatter(): Устанавливает формат отображения основных делений.

  • set_minor_formatter(): Устанавливает формат отображения второстепенных делений.

  • set_major_locator(): Определяет местоположение основных делений.

Обзор FuncFormatter: для чего он нужен и как работает

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

Практическое руководство: Преобразование в проценты с помощью FuncFormatter

Пошаговый пример использования FuncFormatter для оси Y

Ниже приведен пример кода, демонстрирующий использование FuncFormatter для преобразования значений оси Y в проценты:

import matplotlib.pyplot as plt
import matplotlib.ticker as mticker

fig, ax = plt.subplots()
ax.plot([0, 1, 2, 3, 4], [0.1, 0.4, 0.5, 0.8, 0.9])

def to_percent(y, position):
    # Функция для преобразования в проценты
    s = str(100 * y)
    # Метка содержит символ '%', но он не нужен
    if s[-1] == '0':
        return s[:-2] + '%'
    else:
        return s + '%'

# Использование FuncFormatter
formatter = mticker.FuncFormatter(to_percent)
ax.yaxis.set_major_formatter(formatter)

plt.show()
Реклама

В этом примере создается функция to_percent, которая умножает значения оси Y на 100 и добавляет символ ‘%’. Затем FuncFormatter используется для применения этой функции к оси Y.

Настройка формата отображения процентов (знаки после запятой, префикс/суффикс)

Можно настроить формат отображения процентов, чтобы указать количество знаков после запятой или добавить префикс/суффикс. Например:

import matplotlib.pyplot as plt
import matplotlib.ticker as mticker

fig, ax = plt.subplots()
ax.plot([0, 1, 2, 3, 4], [0.1234, 0.4567, 0.5678, 0.8901, 0.9123])

def to_percent(y, position):
    # Функция для преобразования в проценты с одним знаком после запятой
    s = '{:.1f}'.format(100 * y)
    return s + '%'

formatter = mticker.FuncFormatter(to_percent)
ax.yaxis.set_major_formatter(formatter)

plt.show()

В этом примере используется форматирование строк ({:.1f}) для отображения одного знака после запятой.

Альтернативные методы и расширенные возможности

Использование axis.set_major_formatter для форматирования процентов

Вместо создания отдельного объекта FuncFormatter, можно напрямую использовать метод axis.set_major_formatter с lambda-функцией:

import matplotlib.pyplot as plt
import matplotlib.ticker as mticker

fig, ax = plt.subplots()
ax.plot([0, 1, 2, 3, 4], [0.2, 0.4, 0.6, 0.8, 1.0])

ax.yaxis.set_major_formatter(mticker.FuncFormatter(lambda y, pos: '{:.0f}%'.format(y*100)))

plt.show()

Примеры применения форматирования процентов на разных типах графиков (гистограммы, круговые диаграммы)

Гистограмма:

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

# Данные для гистограммы (в виде долей)
data = np.array([0.1, 0.2, 0.2, 0.3, 0.2])

fig, ax = plt.subplots()
ax.hist(data, weights=np.ones(len(data)) / len(data))

ax.yaxis.set_major_formatter(mticker.PercentFormatter(xmax=1))

plt.show()

Круговая диаграмма:

import matplotlib.pyplot as plt

# Данные для круговой диаграммы (в виде долей)
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [0.15, 0.30, 0.45, 0.10]

fig1, ax1 = plt.subplots()
ax1.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
ax1.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle.

plt.show()

В случае круговых диаграмм, autopct='%1.1f%%' автоматически форматирует доли в проценты.

Заключение

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


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