Функция Matplotlib pie()


Matplotlib 参考文档Справочная документация Matplotlib

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

Круговые диаграммы подходят для отображения пропорций небольшого числа категорий (обычно в пределах 5–8).

Определение функции

Интерфейс pyplot

matplotlib.pyplot.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, **kwargs)

Интерфейс Axes

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, **kwargs)

Описание параметра

ПараметрTypeОписание
xОдномерный массив (array-like)Значение каждого сектора (обязательно), автоматически нормализуется.
explodeмассивоподобныйРасстояние, на которое каждый сектор смещён от центра; 0 означает отсутствие смещения.
labelslistТекст подписи для каждого сектора.
colorslistЦвет каждого сектора.
autopctstr или callableАвтоматически отображать проценты, например '%1.1f%%' означает один знак после запятой; None скрывает их.
pctdistancefloatКоэффициент расстояния текста процентов от центра, по умолчанию 0.6.
shadowboolДобавлять ли эффект тени.
labeldistancefloatКоэффициент расстояния подписей от центра, по умолчанию 1.1.
startanglefloatНачальный угол первого сектора (против часовой стрелки); 0 означает начало от направления на 3 часа.
radiusfloatРадиус круговой диаграммы, по умолчанию 1.
counterclockboolНаправление сектора: True — против часовой стрелки (по умолчанию), False — по часовой стрелке.
wedgepropsdictПараметры, передаваемые каждому сектору (Wedge), например, {'edgecolor':'white', 'linewidth':1}
textpropsdictПараметры, передаваемые тексту, например, {'fontsize':12, 'color':'gray'}
centertupleКоординаты центра круговой диаграммы, по умолчанию (0, 0).
normalizeboolНормализовать ли x, чтобы сумма была равна 1; по умолчанию True.

pie() возвращает три списка:(patches, texts, autotexts)patches — это объекты секторов, texts — тексты подписей, а autotexts — тексты процентов.


Примеры использования

Пример 1: Базовая круговая диаграмма

Пример

import matplotlib.pyplot as plt

# Данные
sizes = [30, 25, 20, 15, 10]
labels = ['Python', 'Java', 'JavaScript', 'C++', 'Go']
colors = ['#3498db', '#e74c3c', '#f39c12', '#2E7DCC', '#9b59b6']

fig, ax = plt.subplots(layout='constrained')

# Нарисовать круговую диаграмму
ax.pie(sizes, labels=labels, colors=colors,
       autopct='%1.1f%%',         # Отображать проценты с одним десятичным знаком
       startangle=90,             # Начать с направления на 12 часов
       wedgeprops={'edgecolor': 'white', 'linewidth': 1})

ax.set_title('Использование языков программирования')
plt.show()

Пример 2: Выделение конкретного сектора (explode)

Пример

import matplotlib.pyplot as plt

sizes = [35, 25, 20, 12, 8]
labels = ['Поиск', 'Социальные', 'Прямые', 'Электронная почта', 'Реферальные']
explode = (0.1, 0, 0, 0, 0)  # Сместить первый сектор (Поиск) на 0.1

fig, ax = plt.subplots(layout='constrained')

wedges, texts, autotexts = ax.pie(
    sizes, labels=labels, explode=explode,
    autopct='%1.1f%%', startangle=90,
    colors=['#2E7DCC', '#3498db', '#9b59b6', '#f39c12', '#e74c3c'],
    wedgeprops={'edgecolor': 'white', 'linewidth': 1},
    textprops={'fontsize': 11})

# Изменить цвет текста процентного значения
for autotext in autotexts:
    autotext.set_color('white')
    autotext.set_fontweight('bold')

ax.set_title('Источники трафика сайта', fontsize=14)
plt.show()

Пример 3: диаграмма-пончик (кольцевая диаграмма)

Пример

import matplotlib.pyplot as plt

sizes = [40, 30, 20, 10]
labels = ['Chrome (40%)', 'Safari (30%)', 'Firefox (20%)', 'Другие (10%)']

fig, ax = plt.subplots(layout='constrained')

# Используйте wedgeprops, чтобы задать width и создать кольцевую диаграмму
wedges, texts = ax.pie(
    sizes, labels=labels,
    startangle=90,
    colors=['#4285F4', '#346EA8', '#FBBC05', '#EA4335'],
    wedgeprops={'width': 0.4,      # Ширина сектора (0~1); если <1, то становится кольцевой диаграммой
                'edgecolor': 'white', 'linewidth': 2})

ax.set_title('Доля рынка браузеров (кольцевая диаграмма)', fontsize=14)
plt.show()

Пример 4: Многоуровневая кольцевая диаграмма

Пример

import matplotlib.pyplot as plt

# Данные внешнего слоя и данные внутреннего слоя
outer_sizes = [35, 30, 20, 15]
inner_sizes = [40, 30, 30]

outer_labels = ['Азия', 'Европа', 'Америка', 'Африка']
inner_labels = ['Мобильные', 'Настольные', 'Планшеты']

outer_colors = ['#FF6B6B', '#4ECDC4', '#45B7D1', '#71A0CE']
inner_colors = ['#FFE0B2', '#BBDEFB', '#C8D7E6']

fig, ax = plt.subplots(layout='constrained')

# Внешнее кольцо
ax.pie(outer_sizes, radius=1.3,
       labels=outer_labels,
       labeldistance=1.1,
       colors=outer_colors,
       wedgeprops={'width': 0.3, 'edgecolor': 'white', 'linewidth': 2})

# Внутреннее кольцо
ax.pie(inner_sizes, radius=1.0,
       labels=inner_labels,
       labeldistance=0.75,
       colors=inner_colors,
       wedgeprops={'width': 0.3, 'edgecolor': 'white', 'linewidth': 2})

ax.set_title('Многоуровневая кольцевая диаграмма', fontsize=14)
plt.show()

ЧАВО

Круговая диаграмма против столбчатой: когда что использовать?

Круговые диаграммы подходят для отображения пропорций до 5-8 категорий, позволяя читателям интуитивно понять долю от целого.

Когда категорий слишком много (больше 8) или требуется точное числовое сравнение, предпочтительнее использовать столбчатую диаграмму.

Объяснение формата autopct?

'%1.1f%%'Означает число с плавающей точкой с минимальной общей шириной в 1 цифру и 1 десятичным знаком, за которым следует%%(знак процента).

Вы также можете передать функцию, напримерautopct=lambda pct: f'{pct:.1f}%'。


Matplotlib 参考文档Справочная документация Matplotlib

Другие расширения