Fonction pie() de Matplotlib


Matplotlib 参考文档Documentation de référence de Matplotlib

pie()Utilisé pour dessiner des diagrammes circulaires, montrant la relation proportionnelle de chaque partie par rapport au tout.

Les diagrammes circulaires conviennent pour afficher les proportions d’un petit nombre de catégories (généralement entre 5 et 8).

Définition de fonction

Interface 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)

Interface 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)

Description du paramètre

ParamètreTypeDescription
xTableau 1D de type array-likeLa valeur de chaque secteur (obligatoire), normalisée automatiquement.
explodede type tableauLa distance dont chaque secteur est décalé par rapport au centre ; 0 signifie aucun décalage.
labelslisteTexte d’étiquette pour chaque secteur.
colorslisteCouleur de chaque secteur.
autopctstr ou callableAffiche automatiquement les pourcentages, par ex. '%1.1f%%' signifie une décimale ; None le masque.
pctdistancefloatRapport de distance du texte de pourcentage par rapport au centre, par défaut 0,6.
shadowboolIndique s'il faut ajouter un effet d'ombre.
labeldistancefloatRapport de distance des étiquettes par rapport au centre, par défaut 1.1.
startanglefloatAngle de départ du premier secteur (sens antihoraire) ; 0 signifie partir de la direction de 3 heures.
radiusfloatRayon du diagramme circulaire, par défaut 1.
counterclockboolSens des secteurs : True correspond au sens antihoraire (par défaut), False au sens horaire.
wedgepropsdictParamètres passés à chaque secteur (Wedge), par exemple, {'edgecolor':'white', 'linewidth':1}
textpropsdictParamètres passés au texte, par exemple, {'fontsize':12, 'color':'gray'}
centertupleCoordonnées du centre du diagramme circulaire, par défaut (0, 0).
normalizeboolIndique s'il faut normaliser x afin que le total soit 1, True par défaut.

pie() renvoie trois listes :(patches, texts, autotexts)patches sont les objets de secteur, texts sont les textes des libellés et autotexts sont les textes des pourcentages.


Exemples d'utilisation

Exemple 1 : Diagramme circulaire de base

Exemple

import matplotlib.pyplot as plt

# Données
sizes = [30, 25, 20, 15, 10]
labels = ['Python', 'Java', 'JavaScript', 'C++', 'Go']
colors = ['#3498db', '#e74c3c', '#f39c12', '#2E7DCC', '#9b59b6']

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

# Tracer le diagramme circulaire
ax.pie(sizes, labels=labels, colors=colors,
       autopct='%1.1f%%',         # Afficher les pourcentages, en conservant une décimale
       startangle=90,             # Commencer à partir de la direction de 12 heures
       wedgeprops={'edgecolor': 'white', 'linewidth': 1})

ax.set_title('Utilisation des langages de programmation')
plt.show()

Exemple 2 : Mise en évidence d'un secteur spécifique (explode)

Exemple

import matplotlib.pyplot as plt

sizes = [35, 25, 20, 12, 8]
labels = ['Recherche', 'Social', 'Direct', 'E-mail', 'Référence']
explode = (0.1, 0, 0, 0, 0)  # Décaler le premier secteur (Recherche) de 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})

# Modifier la couleur du texte de pourcentage
for autotext in autotexts:
    autotext.set_color('white')
    autotext.set_fontweight('bold')

ax.set_title('Sources de trafic du site Web', fontsize=14)
plt.show()

Exemple 3 : Diagramme en anneau (Diagramme en beignet)

Exemple

import matplotlib.pyplot as plt

sizes = [40, 30, 20, 10]
labels = ['Chrome (40%)', 'Safari (30%)', 'Firefox (20%)', 'Autre (10%)']

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

# Utilisez wedgeprops pour définir la largeur afin de créer un diagramme en anneau
wedges, texts = ax.pie(
    sizes, labels=labels,
    startangle=90,
    colors=['#4285F4', '#346EA8', '#FBBC05', '#EA4335'],
    wedgeprops={'width': 0.4,      # Largeur du secteur (0~1) ; si <1, il devient un diagramme en anneau
                'edgecolor': 'white', 'linewidth': 2})

ax.set_title('Part de marché des navigateurs (diagramme en anneau)', fontsize=14)
plt.show()

Exemple 4 : Diagramme en anneau à plusieurs niveaux

Exemple

import matplotlib.pyplot as plt

# Données de la couche externe et données de la couche interne
outer_sizes = [35, 30, 20, 15]
inner_sizes = [40, 30, 30]

outer_labels = ['Asie', 'Europe', 'Amérique', 'Afrique']
inner_labels = ['Mobile', 'Ordinateur', 'Tablette']

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

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

# Anneau externe
ax.pie(outer_sizes, radius=1.3,
       labels=outer_labels,
       labeldistance=1.1,
       colors=outer_colors,
       wedgeprops={'width': 0.3, 'edgecolor': 'white', 'linewidth': 2})

# Anneau intérieur
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('Diagramme en anneau à niveaux multiples', fontsize=14)
plt.show()

FAQ

Diagramme circulaire vs diagramme à barres : quand utiliser lequel ?

Les diagrammes circulaires conviennent pour représenter les proportions lorsqu'il y a jusqu'à 5-8 catégories, ce qui permet aux lecteurs de saisir intuitivement la part de l'ensemble.

Lorsqu'il y a trop de catégories (plus de 8) ou qu'une comparaison numérique précise est nécessaire, préférez un diagramme à barres.

Explication du format autopct ?

'%1.1f%%'Désigne un nombre à virgule flottante avec une largeur totale minimale de 1 chiffre et 1 décimale, suivi de%%(signe de pourcentage).

Vous pouvez également passer une fonction, telle queautopct=lambda pct: f'{pct:.1f}%'。


Matplotlib 参考文档Documentation de référence de Matplotlib

Autres extensions