Introducción
En este laboratorio, aprenderemos a trazar histogramas con Matplotlib. Generaremos datos y graficaremos un histograma simple, actualizaremos los colores del histograma, graficaremos un histograma bidimensional y personalizaremos nuestro histograma.
Consejos sobre la VM
Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.
A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.
Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.
Generar datos y trazar un histograma simple
Para generar un histograma unidimensional, solo necesitamos un solo vector de números. Para un histograma bidimensional, necesitaremos un segundo vector. Generaremos ambos a continuación y mostraremos el histograma para cada vector.
import matplotlib.pyplot as plt
import numpy as np
## Crea un generador de números aleatorios con una semilla fija para la reproducibilidad
rng = np.random.default_rng(19680801)
N_points = 100000
n_bins = 20
## Genera dos distribuciones normales
dist1 = rng.standard_normal(N_points)
dist2 = 0.4 * rng.standard_normal(N_points) + 5
fig, axs = plt.subplots(1, 2, sharey=True, tight_layout=True)
## Podemos establecer el número de bins con el argumento de palabras clave *bins*.
axs[0].hist(dist1, bins=n_bins)
axs[1].hist(dist2, bins=n_bins)
plt.show()
Actualizar los colores del histograma
El método histogram devuelve (entre otras cosas) un objeto patches. Esto nos da acceso a las propiedades de los objetos dibujados. Con esto, podemos editar el histograma según nuestras preferencias. Cambiemos el color de cada barra según su valor y.
## N es la cuenta en cada intervalo, bins es el límite inferior del intervalo
N, bins, patches = axs[0].hist(dist1, bins=n_bins)
## Codificaremos el color por altura, pero podrías usar cualquier escalar
fracs = N / N.max()
## necesitamos normalizar los datos a 0..1 para el rango completo de la mapa de colores
norm = colors.Normalize(fracs.min(), fracs.max())
## Ahora, recorreremos nuestros objetos y estableceremos el color de cada uno en consecuencia
for thisfrac, thispatch in zip(fracs, patches):
color = plt.cm.viridis(norm(thisfrac))
thispatch.set_facecolor(color)
## También podemos normalizar nuestras entradas por el número total de conteos
axs[1].hist(dist1, bins=n_bins, density=True)
## Ahora formateamos el eje y para mostrar el porcentaje
axs[1].yaxis.set_major_formatter(PercentFormatter(xmax=1))
plt.show()
Trazar un histograma bidimensional
Para trazar un histograma bidimensional, solo se necesita dos vectores de la misma longitud, correspondientes a cada eje del histograma.
fig, ax = plt.subplots(tight_layout=True)
hist = ax.hist2d(dist1, dist2)
plt.show()
Personalizar su histograma
Personalizar un histograma bidimensional es similar al caso unidimensional, puedes controlar componentes visuales como el tamaño del intervalo o la normalización de colores.
fig, axs = plt.subplots(3, 1, figsize=(5, 15), sharex=True, sharey=True,
tight_layout=True)
## Podemos aumentar el número de intervalos en cada eje
axs[0].hist2d(dist1, dist2, bins=40)
## Así como definir la normalización de los colores
axs[1].hist2d(dist1, dist2, bins=40, norm=colors.LogNorm())
## También podemos definir números personalizados de intervalos para cada eje
axs[2].hist2d(dist1, dist2, bins=(80, 10), norm=colors.LogNorm())
plt.show()
Resumen
En este laboratorio, aprendimos cómo trazar histogramas con Matplotlib. Generamos datos y tracamos un histograma simple, actualizamos los colores del histograma, tracamos un histograma bidimensional y personalizamos nuestro histograma. Podemos utilizar estas técnicas para visualizar y analizar datos en una variedad de contextos.