Как построить круговую диаграмму в Python с использованием Matplotlib?

Что такое круговая диаграмма и когда ее использовать?

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

Круговую диаграмму стоит использовать, когда:

  • Необходимо показать доли целого.
  • Категорий немного (обычно до 5-7).
  • Не требуется высокая точность сравнения (в отличие от столбчатых диаграмм).

Круговую диаграмму не стоит использовать, когда:

  • Категорий слишком много.
  • Доли слишком малы и трудно различимы.
  • Необходима высокая точность сравнения значений.
  • Нужно отобразить динамику изменений.

Обзор библиотеки Matplotlib и ее модуля pyplot

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

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

Необходимые условия: установка Matplotlib

Прежде чем начать, убедитесь, что у вас установлена библиотека Matplotlib. Вы можете установить ее с помощью pip:

pip install matplotlib

Создание базовой круговой диаграммы

Подготовка данных для диаграммы

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

from typing import List
import matplotlib.pyplot as plt

labels: List[str] = ['Контекстная реклама', 'SEO', 'SMM', 'Таргетированная реклама']
sizes: List[float] = [35, 25, 20, 20]

Здесь labels – это список названий каналов, а sizes – соответствующие доли бюджета в процентах.

Использование функции plt.pie() для построения диаграммы

Функция plt.pie() является основной для построения круговых диаграмм в Matplotlib. Ей необходимо передать размеры секторов (в нашем случае sizes).

fig, ax = plt.subplots()
ax.pie(sizes)
plt.show()

Добавление заголовка к диаграмме

Чтобы сделать диаграмму более информативной, добавим заголовок:

fig, ax = plt.subplots()
ax.pie(sizes)
ax.set_title('Распределение рекламного бюджета')
plt.show()

Отображение диаграммы с помощью plt.show()

Функция plt.show() отображает созданную диаграмму в отдельном окне.

Настройка внешнего вида круговой диаграммы

Добавление подписей к секторам диаграммы (labels)

Чтобы было понятно, что представляет каждый сектор, добавим подписи:

fig, ax = plt.subplots()
ax.pie(sizes, labels=labels)
ax.set_title('Распределение рекламного бюджета')
plt.show()

Настройка цветов секторов (colors)

Можно задать собственные цвета для каждого сектора, передав список цветов в аргумент colors функции plt.pie():

colors: List[str] = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue']
fig, ax = plt.subplots()
ax.pie(sizes, labels=labels, colors=colors)
ax.set_title('Распределение рекламного бюджета')
plt.show()

Отображение процентов на секторах (autopct)

Аргумент autopct позволяет отображать процентное значение каждого сектора непосредственно на диаграмме. Формат процентов задается с помощью строки формата (например, '%.1f%%' для отображения одного знака после запятой):

fig, ax = plt.subplots()
ax.pie(sizes, labels=labels, colors=colors, autopct='%.1f%%')
ax.set_title('Распределение рекламного бюджета')
plt.show()

Изменение угла начала диаграммы (startangle)

Аргумент startangle позволяет задать угол, с которого начинается первый сектор (в градусах). По умолчанию равен 0 (горизонтальная линия).

fig, ax = plt.subplots()
ax.pie(sizes, labels=labels, colors=colors, autopct='%.1f%%', startangle=90)
ax.set_title('Распределение рекламного бюджета')
plt.show()

Расширенные возможности круговых диаграмм

Разделение секторов диаграммы (explode)

Аргумент explode позволяет «выделить» один или несколько секторов, отодвинув их от центра диаграммы. Это список значений, определяющих смещение каждого сектора.

explode: List[float] = [0.1, 0, 0, 0]  # Отделяем первый сектор (Контекстная реклама)
fig, ax = plt.subplots()
ax.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%.1f%%', startangle=90)
ax.set_title('Распределение рекламного бюджета')
plt.show()

Добавление тени к диаграмме (shadow)

Аргумент shadow=True добавляет тень к диаграмме, делая ее более объемной.

fig, ax = plt.subplots()
ax.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%.1f%%', startangle=90, shadow=True)
ax.set_title('Распределение рекламного бюджета')
plt.show()

Создание круговой диаграммы с легендой (legend)

Для большей наглядности можно добавить легенду, показывающую соответствие цветов и названий секторов. Для этого необходимо вызвать функцию plt.legend().

fig, ax = plt.subplots()
ax.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%.1f%%', startangle=90, shadow=True)
ax.set_title('Распределение рекламного бюджета')
ax.legend(labels, loc='upper right') # Размещение легенды в верхнем правом углу
plt.show()

Использование разных стилей для оформления диаграммы

Matplotlib предоставляет различные стили оформления графиков, которые можно использовать для изменения внешнего вида круговой диаграммы. Например:

plt.style.use('ggplot') # Используем стиль ggplot
fig, ax = plt.subplots()
ax.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%.1f%%', startangle=90, shadow=True)
ax.set_title('Распределение рекламного бюджета')
ax.legend(labels, loc='upper right')
plt.show()

Примеры круговых диаграмм и лучшие практики

Пример 1: Распределение продаж по регионам

Предположим, у нас есть данные о продажах продукта по различным регионам:

regions: List[str] = ['Москва', 'Санкт-Петербург', 'Регионы']
sales: List[float] = [45, 30, 25]
colors: List[str] = ['skyblue', 'lightcoral', 'gold']

fig, ax = plt.subplots()
ax.pie(sales, labels=regions, colors=colors, autopct='%.1f%%', shadow=True, startangle=90)
ax.set_title('Распределение продаж по регионам')
plt.show()

Пример 2: Доля различных браузеров среди пользователей сайта

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

browsers: List[str] = ['Chrome', 'Firefox', 'Safari', 'Edge', 'Other']
usage: List[float] = [60, 15, 10, 8, 7]
colors: List[str] = ['#4285F4', '#EA4335', '#FBBC05', '#34A853', '#90CAF9']

fig, ax = plt.subplots()
ax.pie(usage, labels=browsers, colors=colors, autopct='%.1f%%', shadow=True, startangle=140)
ax.set_title('Доля браузеров среди пользователей сайта')
plt.show()

Рекомендации по созданию понятных и информативных круговых диаграмм

  • Используйте не более 5-7 секторов. Слишком большое количество секторов делает диаграмму трудночитаемой.
  • Сортируйте сектора по размеру. Обычно самые большие сектора располагают сверху или слева.
  • Используйте контрастные цвета. Это облегчает различение секторов.
  • Добавляйте подписи и проценты. Это делает диаграмму более информативной.
  • Не используйте 3D-эффекты без необходимости. 3D-эффекты могут искажать восприятие размеров секторов.
  • Избегайте сложных стилей. Простота и ясность – залог хорошей визуализации.

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