Projet : un tableau de bord des ventes
Combinez courbe, barres, histogramme, annotations et style dans un tableau de bord des ventes 2 × 2.
Introduction
Ce projet rassemble tout le cours : quatre graphiques dans une figure, chacun répondant à une question sur les mêmes données de ventes. Un style commun et des titres clairs rendent le tableau de bord lisible d'un coup d'œil.
plt.style.use fixe les couleurs et les polices de toute la figure. Chaque panneau répond à une question : comment évolue le chiffre d'affaires (une courbe avec le meilleur mois annoté), combien de commandes (barres), ce qui se vend (barres horizontales triées) et le montant habituel d'une commande (un histogramme). color="C1" prend la deuxième couleur du style pour que chaque panneau ait la sienne, et margins laisse de la place à l'étiquette. suptitle titre la figure entière et tight_layout évite les chevauchements. Essayez un autre style, comme "fivethirtyeight" ou "bmh".
Visualiseur interactif
Changez le style pour transformer tout le tableau de bord d'un coup, et choisissez un panneau pour voir le code qui le dessine.
Exemple Matplotlib exécutable
import matplotlib.pyplot as plt
import numpy as np
plt.style.use("ggplot")
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
revenue = np.array([42, 48, 45, 58, 63, 70])
orders = np.array([310, 340, 330, 400, 420, 465])
products = {"Other": 14, "Tablets": 17, "Phones": 31, "Laptops": 38}
order_values = np.random.default_rng(8).gamma(4, 30, 465)
fig, axes = plt.subplots(2, 2, figsize=(10, 7))
fig.suptitle("Sales dashboard, first half of the year", fontsize=14)
axes[0, 0].plot(months, revenue, marker="o")
best = revenue.argmax()
axes[0, 0].annotate(f"{revenue[best]}k", (best, revenue[best]), xytext=(0, 8), textcoords="offset points", ha="center")
axes[0, 0].margins(y=0.2)
axes[0, 0].set_title("Revenue (k$)")
axes[0, 1].bar(months, orders, color="C1")
axes[0, 1].set_title("Orders")
axes[1, 0].barh(list(products), list(products.values()), color="C2")
axes[1, 0].set_title("Share of sales (%)")
axes[1, 1].hist(order_values, bins=20, color="C4", edgecolor="white")
axes[1, 1].set_title("Order value ($)")
fig.tight_layout()
plt.show()
