Comment Tracer un Diagramme Circulaire (Camembert) en Python ?

Introduction

Vous pouvez facilement tracer un diagramme circulaire en Python à l’aide de Matplotlib.

Exemples avec Matplotlib

Voici un exemple simple :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import matplotlib.pyplot as plt

# Données
labels = ['Pommes', 'Bananes', 'Cerises', 'Dattes']
sizes = [30, 20, 35, 15]
colors = ['#ff9999','#66b3ff','#99ff99','#ffcc99']
explode = (0.05, 0, 0, 0)  # Sépare légèrement la première tranche

# Création du diagramme
plt.figure(figsize=(6,6))
plt.pie(
    sizes,
    labels=labels,
    colors=colors,
    explode=explode,
    autopct='%1.1f%%',  # Affiche les pourcentages à 1 décimale
    startangle=90,       # Fait démarrer la première tranche à 90°
    shadow=True
)

plt.title("Répartition des fruits")
plt.show()

Comment tracer un diagramme circulaire en Python ?
Comment tracer un diagramme circulaire en Python ?

Explications :

  • labels : noms des catégories.
  • sizes : valeurs (elles n’ont pas besoin de totaliser 100, sauf si vous voulez des pourcentages).
  • colors : optionnel — définit les couleurs des tranches.
  • explode : optionnel — sépare visuellement les tranches.
  • autopct : affiche les valeurs en pourcentage à l’intérieur du graphique.
  • startangle : oriente le graphique pour une meilleure lisibilité.

Diagramme circulaire “explosé” avec pourcentage + libellé

Idéal pour bien mettre en valeur la composition :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import matplotlib.pyplot as plt

# Données
sizes = [40, 25, 20, 10, 5]
labels = ['Python', 'JavaScript', 'C++', 'Java', 'Autres']
colors = plt.cm.viridis([0.1, 0.3, 0.5, 0.7, 0.9])
explode = [0.1 if s == max(sizes) else 0 for s in sizes]

# Tracé
plt.figure(figsize=(7,7))
wedges, texts, autotexts = plt.pie(
    sizes,
    labels=labels,
    autopct=lambda p: f'{p:.1f}%\n({int(p*sum(sizes)/100)})',
    colors=colors,
    explode=explode,
    startangle=140,
    textprops={'color':"w", 'fontsize':12},
    shadow=True
)

plt.setp(autotexts, size=10, weight="bold")
plt.title("Popularité des langages de programmation", fontsize=14)
plt.show()

Comment tracer un diagramme circulaire en Python ?
Comment tracer un diagramme circulaire en Python ?

Astuce : autopct avec une fonction lambda personnalisée permet d’afficher à la fois le pourcentage et la valeur brute.

Diagramme en anneau (Donut Chart)

Les diagrammes en anneau ont un style moderne et sont parfaits quand l’espace est limité :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import matplotlib.pyplot as plt

sizes = [50, 30, 15, 5]
labels = ['Amérique du Nord', 'Europe', 'Asie', 'Autres']

fig, ax = plt.subplots(figsize=(6,6))
wedges, texts, autotexts = ax.pie(
    sizes,
    labels=labels,
    autopct='%1.1f%%',
    startangle=90,
    wedgeprops={'width':0.4, 'edgecolor':'white'}
)

ax.set_title("Part de marché par région")
plt.show()

wedgeprops={'width':0.4} transforme le diagramme circulaire en anneau.

Comment tracer un diagramme circulaire en Python ?
Comment tracer un diagramme circulaire en Python ?

Diagramme en double anneau (Nested Donut Chart)

Parfait pour comparer deux niveaux de données — par exemple, régions et sous-régions :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import matplotlib.pyplot as plt

outer_sizes = [50, 30, 20]
outer_labels = ['Amériques', 'Europe', 'Asie']
inner_sizes = [25, 15, 10, 10, 8, 12, 5, 3, 12]
inner_labels = ['USA', 'Canada', 'Brésil', 'Royaume-Uni', 'France', 'Allemagne', 'Chine', 'Inde', 'Japon']

fig, ax = plt.subplots(figsize=(7,7))
ax.pie(outer_sizes, radius=1, labels=outer_labels, 
       wedgeprops=dict(width=0.3, edgecolor='white'))
ax.pie(inner_sizes, radius=0.7, labels=inner_labels, 
       wedgeprops=dict(width=0.3, edgecolor='white'))

ax.set(aspect="equal", title='Ventes mondiales par région et par pays')
plt.show()

L’anneau externe montre les régions, l’anneau interne montre les pays à l’intérieur de chaque région.

Comment tracer un diagramme circulaire en Python ?
Comment tracer un diagramme circulaire en Python ?

Diagramme circulaire avec palette de couleurs dynamique

Permet d’ajouter automatiquement de la variété grâce aux colormaps :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import matplotlib.pyplot as plt
import numpy as np

categories = ['A','B','C','D','E','F','G']
values = np.random.randint(10, 50, size=len(categories))

plt.figure(figsize=(7,7))
plt.pie(values, labels=categories, 
        colors=plt.cm.plasma(np.linspace(0, 1, len(categories))),
        autopct='%1.1f%%', startangle=90)
plt.title('Couleurs dynamiques avec Colormap')
plt.show()

L’utilisation de

1
plt.cm.<colormap>

produit automatiquement des dégradés de couleurs esthétiques.

Comment tracer un diagramme circulaire en Python ?
Comment tracer un diagramme circulaire en Python ?

Exemples avec Pandas

Si vous avez déjà un DataFrame, vous pouvez directement tracer un diagramme circulaire :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import pandas as pd
import matplotlib.pyplot as plt

data = {'Fruit': ['Pomme', 'Banane', 'Cerise', 'Datte'],
        'Quantité': [30, 20, 35, 15]}
df = pd.DataFrame(data)

df.set_index('Fruit')['Quantité'].plot(kind='pie', autopct='%1.1f%%', figsize=(6,6))
plt.ylabel('')  # Supprime le label de l’axe Y
plt.title('Répartition des fruits')
plt.show()

Comment tracer un diagramme circulaire en Python ?
Comment tracer un diagramme circulaire en Python ?

Diagramme circulaire à partir d’un DataFrame Pandas

Très utile pour les pipelines de données réelles :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({
    'Catégorie': ['Énergie', 'Transport', 'Agriculture', 'Industrie', 'Résidentiel'],
    'Émissions': [35, 25, 20, 15, 5]
})

df.set_index('Catégorie')['Émissions'].plot(
    kind='pie', 
    autopct='%1.1f%%',
    cmap='coolwarm',
    figsize=(6,6),
    title='Émissions mondiales de CO₂ par secteur'
)
plt.ylabel('')
plt.show()

Comment tracer un diagramme circulaire en Python ?
Comment tracer un diagramme circulaire en Python ?

Peut-on utiliser Seaborn pour créer des diagrammes circulaires ?

Seaborn n’est pas conçu pour les diagrammes circulaires, et l’utiliser à cette fin n’en vaut pas la peine.

La philosophie de conception de Seaborn

Seaborn est construit sur Matplotlib, mais il se concentre sur les visualisations statistiques, par exemple :

  • distributions (sns.histplot, sns.kdeplot)
  • comparaisons catégorielles (sns.barplot, sns.boxplot)
  • relations (sns.scatterplot, sns.lineplot)
  • matrices (sns.heatmap)

Il n’implémente pas de diagrammes circulaires car :

  • Les diagrammes circulaires sont peu précis pour comparer les grandeurs.
  • Les diagrammes en barres verticales ou horizontales sont plus efficaces pour représenter des proportions.

Alternative : utiliser le style de Seaborn avec Matplotlib

Vous pouvez néanmoins améliorer l’esthétique d’un diagramme circulaire en appliquant le style de Seaborn :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import matplotlib.pyplot as plt
import seaborn as sns

sns.set_theme(style="whitegrid")  # applique le thème Seaborn

sizes = [40, 25, 20, 15]
labels = ['A', 'B', 'C', 'D']

plt.figure(figsize=(6,6))
plt.pie(
    sizes,
    labels=labels,
    autopct='%1.1f%%',
    startangle=90,
    colors=sns.color_palette("pastel")
)
plt.title("Diagramme circulaire avec style Seaborn")
plt.show()

Cela combine les palettes de couleurs douces de Seaborn et le rendu de Matplotlib.

How to Plot a Pie Chart in Python ?
How to Plot a Pie Chart in Python ?

Meilleures alternatives aux diagrammes circulaires avec Seaborn

Pour représenter des proportions plus efficacement :

  • sns.barplot() → comparer les parts d’un tout
  • sns.histplot() avec multiple='fill' → barres empilées en pourcentage
  • sns.countplot() → compter les occurrences par catégorie
  • sns.violinplot() / sns.boxplot() → visualiser des distributions

Exemple – une alternative au diagramme circulaire :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt

data = pd.DataFrame({
    "Catégorie": ["A", "B", "C", "D"],
    "Valeur": [40, 25, 20, 15]
})

sns.barplot(data=data, x="Catégorie", y="Valeur", palette="pastel")
plt.title("Comparaison des proportions (mieux qu’un diagramme circulaire)")
plt.show()

How to Plot a Pie Chart in Python ?
How to Plot a Pie Chart in Python ?

Résumé

Question Réponse
Seaborn dispose-t-il d’une fonction pieplot() ? Non
Peut-on améliorer le style d’un diagramme circulaire Matplotlib avec Seaborn ? Oui (via les palettes et thèmes)
Est-il utile d’utiliser Seaborn uniquement pour les diagrammes circulaires ? Pas vraiment
Meilleures alternatives Seaborn ? barplot, countplot, histplot

Références

Liens Site
https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_features.html Matplotlib – Galerie des diagrammes circulaires
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.pie.html Matplotlib – Documentation officielle pyplot.pie()
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.plot.html Pandas – Méthode DataFrame.plot() (pour les diagrammes circulaires)
Image

of