Graphiques circulaires imbriqués #

Les exemples suivants montrent deux façons de créer un graphique à secteurs imbriqué dans Matplotlib. Ces graphiques sont souvent appelés graphiques en anneau.

import matplotlib.pyplot as plt
import numpy as np

Le moyen le plus simple de créer un graphique à secteurs consiste à utiliser la pieméthode .

Dans ce cas, pie prend des valeurs correspondant aux décomptes dans un groupe. Nous allons d'abord générer de fausses données, correspondant à trois groupes. Dans le cercle intérieur, nous traiterons chaque nombre comme appartenant à son propre groupe. Dans le cercle extérieur, nous les tracerons en tant que membres de leurs 3 groupes d'origine.

L'effet de la forme de beignet est obtenu en définissant a widthsur les secteurs du secteur via l' argument wedgeprops .

fig, ax = plt.subplots()

size = 0.3
vals = np.array([[60., 32.], [37., 40.], [29., 10.]])

cmap = plt.colormaps["tab20c"]
outer_colors = cmap(np.arange(3)*4)
inner_colors = cmap([1, 2, 5, 6, 9, 10])

ax.pie(vals.sum(axis=1), radius=1, colors=outer_colors,
       wedgeprops=dict(width=size, edgecolor='w'))

ax.pie(vals.flatten(), radius=1-size, colors=inner_colors,
       wedgeprops=dict(width=size, edgecolor='w'))

ax.set(aspect="equal", title='Pie plot with `ax.pie`')
plt.show()
Diagramme circulaire avec `ax.pie`

Cependant, vous pouvez obtenir le même résultat en utilisant un graphique à barres sur des axes avec un système de coordonnées polaires. Cela peut donner plus de flexibilité sur la conception exacte de la parcelle.

Dans ce cas, nous devons mapper les valeurs x du graphique à barres sur les radians d'un cercle. La somme cumulée des valeurs est utilisée comme bords des barres.

fig, ax = plt.subplots(subplot_kw=dict(projection="polar"))

size = 0.3
vals = np.array([[60., 32.], [37., 40.], [29., 10.]])
# Normalize vals to 2 pi
valsnorm = vals/np.sum(vals)*2*np.pi
# Obtain the ordinates of the bar edges
valsleft = np.cumsum(np.append(0, valsnorm.flatten()[:-1])).reshape(vals.shape)

cmap = plt.colormaps["tab20c"]
outer_colors = cmap(np.arange(3)*4)
inner_colors = cmap([1, 2, 5, 6, 9, 10])

ax.bar(x=valsleft[:, 0],
       width=valsnorm.sum(axis=1), bottom=1-size, height=size,
       color=outer_colors, edgecolor='w', linewidth=1, align="edge")

ax.bar(x=valsleft.flatten(),
       width=valsnorm.flatten(), bottom=1-2*size, height=size,
       color=inner_colors, edgecolor='w', linewidth=1, align="edge")

ax.set(title="Pie plot with `ax.bar` and polar coordinates")
ax.set_axis_off()
plt.show()
Diagramme circulaire avec `ax.bar` et coordonnées polaires

Références

L'utilisation des fonctions, méthodes, classes et modules suivants est illustrée dans cet exemple :

Galerie générée par Sphinx-Gallery