Matplotlib est un module qui permet de faire des graphiques 2D, mais pas que. Ce qui nous intéresse aujourd'hui, ce sont les camemberts.
Je voulais avoir un visuel de la consommation électrique de chaque pièce avec, en bonus, la possibilité de mettre en avant la plus gourmande. Je me suis donc muni d'un Wattmètre (ou compteur d'énergie 230V / 16A) à 20 balles que j'ai laissé tourner pendant 24 longues heures.

Voici le code :

import matplotlib.pyplot as plt

def make_pie(data=None, subtitle=''):
    """ Créer un camembert.
        - `data` est une liste de facteurs de puissance accumulée (kWh) en 24h
        - `subtitle` est le titre du cambembert
    """

    labels = ['TV', 'Internet', 'Bureau', 'Frigo']
    colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']

    # Décaler le morceau le plus gourmand
    highest = max(data)
    explode = [0.1 if k == highest else 0 for k in data]

    # Le camembert
    plt.pie(data, explode=explode, labels=labels, colors=colors,
            shadow=True, autopct='%1.2f%%')

    # Le titre du camembert
    plt.xlabel(subtitle)

    # Les axes doivent être égaux pour un cambembert rond, non déformé
    plt.axis('equal')


if __name__ == '__main__':
    # Le camembert
    make_pie(data=[0.55, 0.5, 2.6, 1.0], subtitle='14 septembre 2016')

    # Le titre
    plt.suptitle(u'Consommation électrique')

    # Affichage du graphique
    plt.show()

Le résultat est bluffant :

Diagramme circulaire 1

L'interprétation n'est pas le sujet du jour, mais je vois que toute la partie informatique, qui se trouve dans le bureau, pompe bien comme il faut.


Maintenant, 3 mois plus tard (à quelques vaches près), je relance une batterie de tests et souhaite avoir l'affichage des deux camemberts. Il faut modifier 2-3 lignes :

if __name__ == '__main__':
    # Le premier camembert
    plt.subplot(1, 2, 1)
    make_pie(data=[0.55, 0.5, 2.6, 1.0], subtitle='14 septembre 2016')

    # Le second camembert
    plt.subplot(1, 2, 2)
    make_pie(data=[0.55, 0.5, 2.6, 1.0], subtitle='14 décembre 2016')

    # Le titre
    plt.suptitle(u'Consommation électrique')

    # Affichage des graphiques
    plt.show()

La grande nouveauté est l'utilisation de subplot() qui divise l'espace d'affichage en cellules. subplot prend ces arguments :

  • nombre de lignes ;
  • nombre de colonnes ;
  • numéro de la cellule où le camembert sera affiché.

J'ajoute quelques fonctions bien utiles :

# Enregister le graphique au format PDF :
plt.savefig('conso-elec.pdf')

# Voir un graphique en plein écran :
mng = plt.get_current_fig_manager()
mng.full_screen_toggle()

# Voir un graphique dans une fenêtre maximisée :
mng = plt.get_current_fig_manager()
mng.resize(*mng.window.maxsize())