Histogramas con Matplotlib
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.