Круговые диаграммы (Pie chart) представляют круги, разделенные на сектора, где каждый сектор соответствует какой-то определенной серии данных.
Для создания круговых диаграмм применяется функция matplotlib.pyplot.pie() (или ее аналог Axes.pie()):
Axes.pie(x, *, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1,
startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None,
center=(0, 0), frame=False, rotatelabels=False, normalize=True, hatch=None, data=None)
Ключевым параметром является параметр x, который собственно и представляет данные в виде списка. Для каждого элемента в этом списке создается свой сектор в зависимости от его значения. Секторы располагаются против часовой стрелки, по умолчанию начиная с оси x.
Из других параметров следует отметить параметр labels, который представляет список с текстовыми метками для каждого элемента данных, и colors, который хранит набор цветов
для раскрашивания секторов. Например:
import matplotlib.pyplot as plt languages = ["Python", "Java", "C++"] developers = [100, 35, 15] plt.pie(developers, labels = languages) plt.show()
Здесь у нас список languages представляет языки программирования, а список developers - количество разработчиков, которые используют соответствующие языки (соответствие устанавливается через индексы).
Соответственно в функцию plt.pie() в качестве источника данных передаем список developers, а названия языков служат текстовыми метками рядом с соответствующими секторами:
Для раскрашивания секторов применяются некоторые цвета по умолчанию. Переопределим их:
import matplotlib.pyplot as plt languages = ["Python", "Java", "C++"] developers = [100, 35, 15] color_names = ["lightsteelblue", "steelblue", "navy"] plt.pie(developers, labels = languages, colors=color_names) plt.show()
По умолчанию значения меток определяются на основе процентного размера сектора.
Передав параметру autopct функцию или строку форматирования, можно настроить маркировки сектора:
import matplotlib.pyplot as plt languages = ["Python", "Java", "C++"] developers = [100, 35, 15] plt.pie(developers, labels = languages, autopct="%1.1f%%") plt.show()
Здесь для форматирования используется строка "%1.1f%%". Здесь
% обозначает начало спецификации формата.
1. устанавливает минимальное количество символов перед десятичной точкой (1 символ).
.1 определяет точность отображаемого значения после точки (1 цифра после запятой).
f означает форматирование вещественного числа (float).
%% представляет экранизацию символа процента.
Таким образом, %1.1f%% показывает число с одной цифрой после запятой с последующим символом %.
По умолчанию на секторе отображается текста autopct, а текстовая метка - вне сектора. Но мы можем поменять расположение с помощью параметров
labeldistance и pctdistance для позиционирования меток и текста autopct соответственно. labeldistance и
pctdistance представляют отношения радиуса; поэтому они варьируются от 0 для центра круговой диаграммы до 1 для ее края и могут быть установлены больше 1,
чтобы разместить текст за пределами диаграммы:
import matplotlib.pyplot as plt languages = ["Python", "Java", "C++"] developers = [100, 35, 15] plt.pie(developers, labels = languages, autopct="%1.1f%%", pctdistance=1.25, labeldistance=.5) plt.show()
С помощью параметра explode можно выполнить вырез или смещение сегмента:
import matplotlib.pyplot as plt languages = ["Python", "Java", "C++"] developers = [100, 35, 15] explode = (0, 0.1, 0) # разбить только второй сегмент plt.pie(developers, labels = languages, autopct="%1.1f%%", explode=explode) plt.show()
Параметр explode принимает список, где каждый элемент указывает долю радиуса, на которую следует сместить каждый сектор. В примере выше смещаем только второй сектор (для языка Java), поэтому только для него устанавливаем ненулевое значение, а
для всех остальных секторов передаем значение 0
Дополнительно стоит отметить параметр startangle, который позволяет повернуть начальный угол:
plt.pie(developers, labels = languages, autopct="%1.1f%%", explode=explode, startangle=90)
Начальный угол по умолчанию равен 0, и если параметр startangle установлен на 90, то все срезы повернуты против часовой стрелки на 90 градусов.