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

Посмотрите мой отчёт по питанию за предыдущий месяц. Видите там круговую диаграмму? Сейчас мы сделаем точно такую же с помощью Python и Matplotlib.

Исходные данные:

Овощи, фрукты, ягоды21,79
Молочные20,18
Мясные18,82
Орешки13,64
Рыба и морепродукты10,30
Хлебобулочные5,18
Чай, кофе, какао-порошки4,69
Крупы3,06
Приправы1,98
Напитки0,35

Введём эти данные в Python (в качестве IDE я использовал Spyder 3):

Теперь построим круговую диаграмму:

Функция subplots() возвращает объект Figure и объект Axes. Объект Figure — это базовый объект для всех графиков. Нам он пока не особо нужен. Объект Axes — это объект, который содержит все прямоугольники, линии и т. д. С помощью Axes мы и будем рисовать круговую диаграмму. Вызов ax1.pie — это и есть построение нашей круговой диаграммы.

Результат получился таким:

Matplotlib pie
Matplotlib pie

Как видим, результат получился не очень. Вместо круга получился эллипс. Это можно легко исправить добавив ax1.axis('equal'), который укажет, что соотношение длины и ширины диаграммы должны быть одинаковы:

Хотелось бы ещё видеть легенду. Казалось бы, достаточно вызвать ax1.legend(), но так легенда получается поверх всей диаграммы, что выглядит совсем некрасиво.

Код:

Результат:

matplotlib legend
matplotlib legend

Что делать? У функции legend есть параметры. Мы укажем параметр loc и параметр bbox_anchor:

Здесь мы указали, что верхний (upper) левый (left) угол легенды будет располагаться сразу за окончанием по ширине (первый параметр bbox_to_anchor) и в самом верху (второй параметр bbox_to_anchor) нашей диаграммы. Результат:

Matplotlib pie with legend
Matplotlib legend

Вообще, с легендой даже хуже что-то стало. Просто дублирование информации получилось. Но можно улучшить текущую круговую диаграмму, если добавить числа в сами части круга. Это делается с помощью параметра autopct метода pie, куда передаётся строка форматирования чисел:

Результат:

Matplotlib с числами
Matplotlib с легендой и числами

Думаю, пока достаточно. Имейте в виду, что в этом примере мы использовали уже приведённые к проценту значения. Можно было давать исходные значения, например, в рублях.

Рекомендую прочитать предыдущую статью про построение графиков с помощью Matplotlib.

Один комментарий к “Круговая диаграмма в Matplotlib”

  1. В первоначальном коде ‘ax1.pie(sizes, labels=labels)’ ‘sizes’ необходимо заменить на ‘values’ (по названию источника), либо изменить название источника данных.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *