Empiler des parcelles de bar dans Matplotlib

Suraj Joshi 30 janvier 2023
  1. Empiler les diagrammes à barres Matplotlib
  2. Empiler les diagrammes en barres Matplotlib à l’aide de pandas
Empiler des parcelles de bar dans Matplotlib

Nous générons des diagrammes à barres dans Matplotlib en utilisant la méthode matplotlib.pyplot.bar(). Pour empiler le diagramme en barres d’un certain ensemble de données sur un autre, nous ajoutons tous les ensembles de données que nous devons empiler et nous passons la somme comme paramètre bottom à la méthode bar().

import matplotlib.pyplot as plt

data1 = [30, 20, 10, 0, 0]
data2 = [20, 20, 20, 20, 0]
data3 = [50, 60, 70, 80, 100]

year = ["2015", "2016", "2017", "2018", "2019"]

fig, ax = plt.subplots(3, 1, figsize=(10, 8))

ax[0].bar(year, data1, color="red")
ax[0].legend(["C++"])
ax[1].bar(year, data2, color="yellow")
ax[1].legend(["JavaScript"])
ax[2].bar(year, data3, color="green")
ax[2].legend(["Python"])

plt.show()

Production :

Exemple pour expliquer le Bar plot empilé Matplotlib

Ici, nous avons trois histogrammes distincts qui représentent la préférence d’un langage de programmation pour les employés d’une entreprise sur cinq ans. Nous discuterons des moyens d’empiler les diagrammes à barres d’un langage sur un autre et étudierons le choix global des langages de programmation au fil des ans avec un seul diagramme à barres.

Empiler les diagrammes à barres Matplotlib

import numpy as np
import matplotlib.pyplot as plt

data1 = [30, 20, 10, 0, 0]
data2 = [20, 20, 20, 20, 0]
data3 = [50, 60, 70, 80, 100]

year = ["2015", "2016", "2017", "2018", "2019"]

plt.figure(figsize=(9, 7))
plt.bar(year, data3, color="green", label="Python")
plt.bar(year, data2, color="yellow", bottom=np.array(data3), label="JavaScript")
plt.bar(year, data1, color="red", bottom=np.array(data3) + np.array(data2), label="C++")

plt.legend(loc="lower left", bbox_to_anchor=(0.8, 1.0))
plt.show()

Production :

Empilage des parcelles de barres dans Matplotlib

Il empile les différents bargraphes les uns sur les autres. Dans le diagramme, nous traçons d’abord les data3 comme des données Python, qui servent de base pour les autres barres, puis nous traçons la barre des data2, et la barre de base des data3 comme base pour la barre des data2. Pour empiler la barre de data2 sur data3, nous définissons bottom=np.array(data3).

De même, en traçant la barre pour data1, nous utilisons le tracé de la barre de data2 et data3 comme base. Pour ce faire, nous définissons bottom=np.array(data3)+np.array(data2) tout en traçant la barre de data1.

Un point important à noter est que nous devons utiliser des tableaux NumPy pour ajouter les données pour le paramètre bottom. Si nous mettons bottom=data3+data2, il créera par liste en ajoutant les éléments de data2 à la fin de la liste data3.

Si nous ne souhaitons pas utiliser les tableaux NumPy, nous pouvons utiliser la compréhension de liste pour ajouter les éléments correspondants de la liste.

import numpy as np
import matplotlib.pyplot as plt

data1 = [30, 20, 10, 0, 0]
data2 = [20, 20, 20, 20, 0]
data3 = [50, 60, 70, 80, 100]

year = ["2015", "2016", "2017", "2018", "2019"]

plt.figure(figsize=(9, 7))
plt.bar(year, data3, color="green", label="Python")
plt.bar(year, data2, color="yellow", bottom=data3, label="JavaScript")
plt.bar(
    year,
    data1,
    color="red",
    bottom=[sum(data) for data in zip(data2, data3)],
    label="C++",
)

plt.legend(loc="lower left", bbox_to_anchor=(0.8, 1.0))
plt.show()

Production :

Tracés de barres de pile dans Matplotlib en utilisant la compréhension de liste

Empiler les diagrammes en barres Matplotlib à l’aide de pandas

Nous pouvons également utiliser la bibliothèque Pandas en Python pour générer des diagrammes à barres empilées en Python.

import pandas as pd
import matplotlib.pyplot as plt

years = ["2015", "2016", "2017", "2018", "2019"]
data = {
    "Python": [50, 60, 70, 80, 100],
    "JavaScript": [20, 20, 20, 20, 0],
    "C++": [30, 20, 10, 0, 0],
}

df = pd.DataFrame(data, index=years)

df.plot(kind="bar", stacked=True, figsize=(10, 8))
plt.legend(loc="lower left", bbox_to_anchor=(0.8, 1.0))
plt.show()

Production :

Tracés à barres empilées dans Matplotlib en utilisant Pandas

Il génère un diagramme à barres empilées à partir d’un DataFrame de Pandas où le diagramme à barres d’une colonne est empilé sur un autre pour chaque index du DataFrame.

Auteur: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Article connexe - Matplotlib Visualizations