Python

Combinar histogramas en Matplotlib

Una de las grandes ventajas de trabajar con Matplotlib es la facilidad con la que se pueden combinar múltiples gráficas en una única figura. Permitiendo simplificar las tareas de comparación de datos. Algo que no es una excepción en el caso de los histogramas, en una figura se puede mostrar varios, credos a partir de diferentes conjuntos de datos, y analizar de una forma fácil lo diferentes o similares que son estos. Veamos algunas de las opciones que existen para combinar histogramas en Matplotlib.

Incluir dos histogramas en una figura de Matplotlib

Para dibujar dos histogramas en una figura de Matplotlib solamente hay que crear uno y luego otro mediante en la misma figura con el método hist(). El resultado es una única figura con ambos histogramas, superpuesto el segundo sobre el primero. Por ejemplo, en el siguiente código se generan aleatoriamente los valores de dos distribuciones normales con diferente media y se muestran ambos histogramas en una figura.

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)

sim_1 = np.random.normal(0, 4, 10000)
sim_2 = np.random.normal(7, 4, 1000)

plt.hist(sim_1, label='Simulación 1')
plt.hist(sim_2, label='Simulación 2')
plt.legend(loc='upper right')
plt.show()

Al ejecutar este código se obtiene la siguiente figura.

Combinación de dos histogramas creada con Matplotlib

Nótese que la segunda simulación contiene diez veces menos registros que la primera, uno mil en el segundo caso frente a los diez mil del primero, por lo que en la figura casi no se puede ver el segundo histograma. Si lo que se desea comprar es la densidad de datos, es necesario indicarlo a la función hist(). Mediante el parámetro density de la función hist() se puede cambiar el comportamiento de esta para que use en el eje de ordenados se incluya la densidad en lugar de la frecuencia. Así, aunque el número de muestras sea diferente, se puede comparar las densidades de ambas distribuciones. Lo que se muestra en el siguiente código.

plt.hist(sim_1, density=True, label='Simulación 1')
plt.hist(sim_2, density=True, label='Simulación 2')
plt.legend(loc='upper right')
plt.show()

El cual produce la siguiente figura.

Unión de dos histogramas en los que se muestra la densidad de los datos creada con Matplotlib

Visualizar los valores superpuestos al combinar histogramas en Matplotlib

En el último ejemplo el histograma del segundo conjunto de datos oculta parte del primero, dificultando el análisis de la información. Siendo este un problema para el que existen varias soluciones. Una de las opciones más sencillas es incluir un valor de alpha distinto al de la unidad, por lo que los histogramas serán parcialmente transparentes. Así, aunque se superpongan parcialmente los datos, se podrán seguir viendo la forma de todos. Lo que se consigue asignando al parámetro alpha de la función hist() un valor inferior a la unidad, como se muestra en el siguiente ejemplo.

plt.hist(sim_1, alpha=0.5, density=True, label='Simulación 1')
plt.hist(sim_2, alpha=0.5, density=True, label='Simulación 2')
plt.legend(loc='upper right')
plt.show()

Obteniendo la siguiente figura.

Combinación de dos histogramas en Matplotlib con canal Alpha igual a 0,5

Otra opción para comprar histogramas es dibujarlos con un desplazamiento, aunque es algo más complicado. En primer lugar, es necesario definir las posiciones de x en los que se dibujan las barras del histogramas y emplear este vector como entrada de la función hist(). Las posiciones son fáciles de calcular, con np.linspace() se puede indicar el valor mínimo, el máximo y el número de bins. Valores que se pueden obtener de las anteriores figuras. Ahora, solamente se tiene que llamar una vez a la función hist() pasándole como primer parámetro una lista con los distintos conjuntos de datos, la posición de los bins y las opciones que deseemos agregar. Es importante notar que los nombres de las series se han de indicar también en una lista. Por ejemplo, usando el siguiente código.

bins = np.linspace(-15, 20, 15)

plt.hist([sim_1, sim_2], bins, density=True, label=['Simulación 1', 'Simulación 1'])
plt.legend(loc='upper right')
plt.show()

Lo que da como resultado el siguiente histograma.

Dos histogramas desplazados en una figura de Matplotlib

Una figura que es diferente a las anteriores, ahora las barras de cada serie no ocupan todo el espacio, sino que se combinan las de las dos.

Conclusiones

En esta ocasión se ha visto algunas de las opciones existen para combinar histogramas en Matplotlib. Unas opciones que son útiles para comparar de una forma sencilla los valores en diferentes conjuntos de datos. Lo bueno de estos métodos es que se pueden extender a otros tipos de figuras, ya que no es una propiedad exclusiva de los histogramas.

¿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.