Stack Bar Plots in Matplotlib

Suraj Joshi 15 febbraio 2024
  1. Stack Bar Plots Matplotlib
  2. Stack Bar Plots Matplotlib utilizzando Pandas
Stack Bar Plots in Matplotlib

Generiamo grafici a barre in Matplotlib utilizzando il metodo matplotlib.pyplot.bar(). Per impilare il grafico a barre di un certo set di dati su un altro, aggiungiamo tutti i set di dati di cui abbiamo bisogno per impilare e passiamo la somma come parametro inferiore al metodo 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()

Produzione:

Esempio per spiegare il grafico a barre in pila Matplotlib

Qui, abbiamo tre grafici a barre separati che rappresentano la preferenza di un linguaggio di programmazione per i dipendenti di un’azienda nell’arco di cinque anni. Discuteremo i modi per impilare il grafico a barre di un linguaggio rispetto a un altro e studieremo la scelta complessiva dei linguaggi di programmazione nel corso degli anni con un singolo grafico a barre.

Stack Bar Plots 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()

Produzione:

Grafici Stack Bar in Matplotlib

Impila la trama di una barra sopra l’altra. Nella trama, tracciamo prima i dati3 come dati Python, che servono come base per altre barre, e poi tracciamo la barra di dati2, e basiamo la barra di dati3 come base per la barra di data2. Per impilare la barra di data2 su data3, impostiamo bottom=np.array(data3).

Allo stesso modo, mentre tracciamo la barra per data1, usiamo il grafico a barre di data2 e data3 come base. Per farlo, impostiamo bottom=np.array(data3)+np.array(data2) mentre tracciamo la barra di data1.

Un punto importante da notare è che dobbiamo usare gli array NumPy per aggiungere i dati per il parametro bottom. Se impostiamo bottom=data3+data2, creerà una lista aggiungendo gli elementi di data2 alla fine della lista data3.

Se non vogliamo usare gli array NumPy, possiamo usare la comprensione delle liste per aggiungere gli elementi corrispondenti alle 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()

Produzione:

Stack Bar traccia in Matplotlib utilizzando List Comprehension

Stack Bar Plots Matplotlib utilizzando Pandas

Possiamo anche usare la libreria Pandas in Python per generare grafici a barre in pila in 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()

Produzione:

Stack Bar traccia in Matplotlib usando Pandas

Genera un grafico a barre in pila da un Pandas DataFrame in cui il grafico a barre di una colonna è impilato su un altro per ogni indice nel DataFrame.

Autore: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

Articolo correlato - Matplotlib Visualizations