Gráficos de barras apiladas en Matplotlib

Suraj Joshi 30 marzo 2021
  1. Stack Bar Plots Matplotlib
  2. Stack Bar Traza Matplotlib usando Pandas
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:

Ejemplo para explicar Stacked bar plot Matplotlib

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:

Parcelas de barras de apilamiento en Matplotlib

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:

Gráficos de barras de la pila en Matplotlib usando la comprensión de listas

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:

Gráficos de barras apiladas en Matplotlib usando Pandas

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 avatar Suraj Joshi avatar

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

LinkedIn

Artículo relacionado - Matplotlib Visualizations