Python

Creación de histogramas con Matplotlib en Python

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.

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: Matplotlib

Recent Posts

La Paradoja del Cumpleaños, o por qué no es tan raro compartir fecha de nacimiento

Imagínate en una sala con un grupo de personas, por ejemplo, en una oficina, un…

3 días ago

Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python)

En el trabajo diario con ordenadores, es común encontrarse con tareas repetitivas: realizar copias de…

5 días ago

Curiosidad: ¿Por qué usamos p < 0.05? Un umbral que cambió la historia de la ciencia

En casi cualquier análisis estadístico —ya sea en medicina, psicología, economía o ciencia de datos—…

1 semana ago

¿Está concentrado el MSCI World? Un análisis con Gini, Lorenz y leyes de potencia

El MSCI World Index suele presentarse como “la ventana al mundo” para quienes invierten en…

2 semanas ago

Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo

En el mundo del análisis de datos solemos escuchar una idea poderosa: cuantos más datos,…

2 semanas ago

Error npm ERR! code EACCES al instalar paquetes en Node.js: Cómo solucionarlo paso a paso

¿Te has encontrado con este error al intentar instalar paquetes con npm? npm ERR! code…

3 semanas ago

This website uses cookies.