Creación de histogramas con Matplotlib en Python

Publicado el 25 agosto 2022 por Daniel Rodríguez @analyticslane

Los histogramas permiten obtener una visión general de la distribución existente en una muestra de datos. Para lo que dibuja barras asociadas a un rango de valores, siendo la altura de estas proporcional a la frecuencia de aparición de estos. Siendo una representación gráfica muy popular. Existiendo una función para dibujar histogramas con Matplotlib en Python a partir de cualquier conjunto de datos. Veamos a continuación como es el funcionamiento básico de este método.

Creación de histogramas básicos con Matplotlib

La función para la creación de histogramas en Matplotlib es hist(). Una función que solamente tiene un parámetro obligatorio, el conjunto de datos con el que se desea realizar la gráfica. Así, para comprobar el funcionamiento de esta, se puede crear un conjunto de datos aleatorio que siga la distribución normal estándar mediante la función randn() de NumPy y representarla. Siendo esto lo que se hace en el siguiente código.

import numpy as np
import matplotlib.pyplot as plt

data = np.random.RandomState(0).randn(400)

(counts, bins, patches) = plt.hist(data)
plt.xlabel("Datos")
plt.ylabel("Eventos")
plt.show()

Obteniendo como resultado la siguiente figura cuando al ejecutarlo.

Histograma básico creado con Matplotlib en Python

En esta figura se puede observar que los todos datos se encuentran entre -3 y 3, con una mayor frecuencia en torno a 0. Los valores que se esperarían de una distribución normal estándar. Nótese que la función también devuelve una tupla con tres elementos relacionados con la gráfica:

  • count: un vector con el recuento de elementos para cada uno de los bins.
  • bins: un vector con los valores en los que comienza y finaliza cada uno de los bins, por lo contiene un elemento más que el anterior.
  • patches: el contendor de la figura.

Opciones para el número de bins y uso de la densidad

Dos opciones que se usan habitualmente a la hora de crear los histogramas con Matplotlib son bins, con la que se puede indicar el número de bins que se desea para la figura, y density, mediante el cual se puede indicar que se use para el eje y la densidad de probabilidad en lugar de la frecuencia. Por ejemplo, en el siguiente código se ha cambiado el número de bins a 12 y las unidades del eje de ordenadas.

plt.hist(data, bins=12, density=True)
plt.xlabel("Datos")
plt.ylabel("Probabilidad")
plt.show()

Si se ejecuta este código se obtiene la siguiente figura como resultado.

Histograma con 12 bins en el que se representa la frecuencia de ocurrencia

En este caso el cambio más importante respecto a la figura anterior es el número de bins usados. En el eje de ordenadas solamente se tiene un cambio de unidades. Nótese que si no se indica el número de bins este valor será seleccionado en base al número de elementos y la dispersión de estos.

Incluir el CDF en los histogramas con Matplotlib

Opcionalmente la función hist() puede dibujar los valores acumulados del histograma, los que se puede usar como una aproximación de la función distribución acumulada (CDF, del inglés Cumulative Distribution Function). Para lo que se te tiene que indicar el valor verdadero en la propiedad cumulative de la función, tal como se puede ver en el siguiente ejemplo.

plt.hist(data, bins=12, density=True)
plt.hist(data, bins=12, density=True, cumulative=True, label='CDF', histtype='step')
plt.xlabel("Datos")
plt.ylabel("Probabilidad")
plt.show()

Lo que produce la siguiente figura.

Histograma y gráfica con los valores de densidad acumulados creados con Matplotlib

Nótese que también se ha usado la opción histtype='step' para indicar que no se rellene la barras, gracias a lo que se pueden ver tanto el histograma como la función acumulada en la misma figura.

Conclusiones

Los histogramas son unas gráficas bastante populares, por lo que Matplotlib dispone de una función para crearlas de una forma completamente automática. Simplificando mucho el trabajo del analista de datos.