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:
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:
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 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:
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.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn