Gráficos de barras apiladas en Matplotlib
Generamos gráficos de barras en Matplotlib utilizando el método matplotlib.pyplot.bar()
. Para apilar el diagrama de barras de un determinado conjunto de datos sobre otro, añadimos todos los conjuntos de datos que necesitamos apilar y pasamos la suma como el parámetro bottom
al método 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()
Resultado:
Aquí tenemos tres gráficos de barras separados que representan la preferencia de un lenguaje de programación para los empleados de una empresa durante cinco años. Discutiremos las formas de apilar el diagrama de barras de un lenguaje sobre otro y estudiaremos la elección general de los lenguajes de programación a lo largo de los años con un solo diagrama de barras.
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()
Resultado:
Apila el terreno de un bar sobre el de otro. En el gráfico, primero trazamos los data3
como datos de Python, que sirven de base para otras barras, y luego trazamos la barra de data2
, y basamos la barra de data3
como base para la barra de data2
. Para apilar la barra de data2
sobre la de data3
, ponemos bottom=np.array(data3)
.
De manera similar, mientras trazamos la barra para data1
, usamos la barra de data2
y data3
como base. Para ello, establecemos bottom=np.array(data3)+np.array(data2)
mientras trazamos la barra de data1
.
Un punto importante a tener en cuenta es que debemos usar los arrays NumPy para añadir los datos para el parámetro bottom
. Si establecemos bottom=data3+data2
, se creará por lista añadiendo los elementos de data2
al final de la lista data3
.
Si no queremos usar los Arrays de NumPy, podemos usar la comprensión de listas para añadir los elementos correspondientes de las listas.
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()
Resultado:
Stack Bar Traza Matplotlib usando Pandas
También podemos usar la librería Pandas en Python para generar gráficos de barras apilados 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()
Resultado:
Genera un diagrama de barras apilado a partir de un DataFrame de Pandas donde el diagrama de barras de una columna se apila sobre otra para cada índice del DataFrame.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn