Histogramas con Matplotlib

Publicado por Andrea Navarro en

En este artículo veremos como crear y personalizar un histograma utilizando la librería de Python Matplotlib.

Los histogramas son una herramienta gráfica utilizada para visualizar la distribución de una variable, generalmente una frecuencia o cantidad de apariciones de los valores en un conjunto de datos. Las frecuencias suelen agruparse en diferentes rangos o bins.

Para crear un histograma con Matplotlib se utiliza el método hist al que se le pasa una lista de valores. La librería obtendrá la frecuencia de aparición de cada elemento y graficá este valor de acuerdo con rangos de valores.

import matplotlib.pyplot as plt

valores = [23,22,28,32,24,28,32,15,26,22,24,24,26,28,32,41,20,39,51,18,23,28,26,34,17]
fig, ax = plt.subplots()
plt.hist(valores)
plt.show()

Bins

Por defecto los bins o rangos de valores que representarán cada columna del histograma se generarán de manera automática dependiendo de los valores de entrada. Para especificar los rangos a utilizar se utiliza el parámetro bins del método hist al que se le debe asignar una lista con los valores mínimos y máximos de cada rango.

import matplotlib.pyplot as plt

valores = [23,22,28,32,24,28,32,15,26,22,24,24,26,28,32,41,20,39,51,18,23,28,26,34,17]
bins = [10,25,40,55]
fig, ax = plt.subplots()
plt.hist(valores, bins = bins)
plt.show()

Color

Es posible modificar el color de las columnas utilizando el parámetros color y el color de las lineas con ec. Estos colores puede describirse en diferentes formatos de colores . Matplotlib incluye formatos como RGB, RGBA, Hexadecimal, colores por nombre y otros.

import matplotlib.pyplot as plt

valores = [23,22,28,32,24,28,32,15,26,22,24,24,26,28,32,41,20,39,51,18,23,28,26,34,17]
fig, ax = plt.subplots()
plt.hist(valores, color="lightgrey", ec="violet")
plt.show()

Es posible modificar el ancho de las lineas de las columnas con el parámetro lw.

import matplotlib.pyplot as plt

valores = [23,22,28,32,24,28,32,15,26,22,24,24,26,28,32,41,20,39,51,18,23,28,26,34,17]
fig, ax = plt.subplots()
plt.hist(valores, color="yellow", ec="black", lw=3)
plt.show()

Ancho

Las columnas por defecto son creadas sin espacio entre ellas. Es posible generar un margen entre columnas limitando el ancho de las columnas con el parámetro rwidth. El valor correspondiente debe encontrarse entre 0 y 1.

import matplotlib.pyplot as plt

valores = [23,22,28,32,24,28,32,15,26,22,24,24,26,28,32,41,20,39,51,18,23,28,26,34,17]
fig, ax = plt.subplots()
plt.hist(valores, rwidth=0.8)
plt.show()

Múltiples valores

Los histogramas permite comparar la frecuencia de dos conjuntos de datos pasándolos en forma de lista al método hist. Esto generará dos conjuntos de barras comparando las frecuencias de elementos para cada rango.

import matplotlib.pyplot as plt

valoresA = [23,22,28,32,24,28,32,15,26,22,24,24,26,28,32,41,20,39,51,18,23,28,26,34,17]
valoresB = [23,20,30,15,10,25,30,36,20,21,20,23,34,15,14,38,34,17,38,5,34,20,21,30,10]
fig, ax = plt.subplots()
plt.hist([valoresA,valoresB])
plt.show()

Apilado

Otra forma de comparar dos series de valores es mostrar ambas columnas apiladas en lugar de una junto a la otra. Para hacerlo se configura la opción stacked a True.

import matplotlib.pyplot as plt

valoresA = [23,22,28,32,24,28,32,15,26,22,24,24,26,28,32,41,20,39,51,18,23,28,26,34,17]
valoresB = [23,20,30,15,10,25,30,36,20,21,20,23,34,15,14,38,34,17,38,5,34,20,21,30,10]
fig, ax = plt.subplots()
plt.hist([valoresA,valoresB], stacked=True)
#plt.title("Edades Conferencia A")
#plt.xlabel("Edades")
#plt.ylabel("Cantidad")
#plt.show()
plt.savefig("4-hist.png")

Etiquetas y leyendas

Pueden agregarse etiquetas y leyendas al histograma para facilitar su lectura. Los ejes X e Y pueden especificarse con los métodos xlabel e ylabel respectivamente. El título del g Finalmente puede etiquetarse el gráfico con el método title.

import matplotlib.pyplot as plt

valores = [23,22,28,32,24,28,32,15,26,22,24,24,26,28,32,41,20,39,51,18,23,28,26,34,17]
fig, ax = plt.subplots()
plt.hist(valores)
plt.title("Título del gráfico")
plt.xlabel("Etiqueta X")
plt.ylabel("Etiqueta Y")
plt.show()

Grilla

Para mejorar la lectura del gráfico es posible mostrar una grilla. Esto permite leer los valores que no se encuentran cerca del eje con más facilidad. Para mostrar la grilla se utiliza el método grid configurado a True.

import matplotlib.pyplot as plt

valores = [23,22,28,32,24,28,32,15,26,22,24,24,26,28,32,41,20,39,51,18,23,28,26,34,17]
fig, ax = plt.subplots()
plt.hist(valores)
plt.grid(True)
plt.show()

En este artículo hemos visto cómo crear un histograma en Matplotlib a partir de una serie de datos numéricos. También hemos visto algunas configuraciones para modificar la apariencia y legibilidad del gráfico.


¿Preguntas? ¿Comentarios?

Si tenés dudas, o querés dejarnos tus comentarios y consultas, sumate al grupo de Telegram de la comunidad JuncoTIC!
¡Te esperamos!

Categorías: Programación

Andrea Navarro

- Ingeniera en Informática - Docente universitaria - Investigadora