Histogramas con Matplotlib

MatplotlibBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderá a crear y personalizar histogramas utilizando Matplotlib, una de las bibliotecas de visualización de datos más populares en Python. Un histograma es una herramienta potente para visualizar la distribución de un conjunto de datos numéricos. Agrupa números en rangos (o "bins") y muestra la frecuencia de los puntos de datos que caen en cada bin.

Pasará por los siguientes pasos:

  1. Generar datos de muestra usando NumPy.
  2. Crear un histograma básico.
  3. Personalizar el número de bins.
  4. Cambiar el color y el estilo del borde de las barras del histograma.
  5. Normalizar el histograma para mostrar la densidad de probabilidad.

Al final de este laboratorio, podrá generar histogramas informativos y visualmente atractivos para sus proyectos de análisis de datos. Todas las gráficas se guardarán como archivos de imagen, que podrá ver directamente en el LabEx WebIDE.

Generar datos de muestra usando numpy.random

En este paso, generará un conjunto de datos de muestra que podremos usar para graficar un histograma. Utilizaremos la biblioteca NumPy, que es un paquete fundamental para la computación científica en Python. Proporciona un objeto de array multidimensional de alto rendimiento y herramientas para trabajar con estos arrays.

Usaremos la función numpy.random.normal() para generar datos que siguen una distribución normal (o Gaussiana). Este es un tipo común de distribución de datos que se encuentra en muchos escenarios del mundo real.

Primero, abra el archivo main.py desde el explorador de archivos en el lado izquierdo del WebIDE. Luego, agregue el siguiente código. Este código importará la biblioteca numpy y generará 1000 números aleatorios con una media de 0 y una desviación estándar de 1.

import numpy as np

## Generate 1000 data points from a normal distribution
## with a mean (loc) of 0 and a standard deviation (scale) of 1.
data = np.random.normal(loc=0, scale=1, size=1000)

print("Sample data generated successfully.")

Para ejecutar el script, abra una terminal en el WebIDE (Terminal -> New Terminal) y ejecute el siguiente comando. Su directorio de trabajo ya es /home/labex/project.

python3 main.py

Verá un mensaje de confirmación en la terminal.

Sample data generated successfully.

La variable data en su script ahora contiene un array de 1000 números, listo para la visualización en el siguiente paso.

Graficar histograma usando plt.hist(data)

En este paso, creará su primer histograma. Utilizaremos el módulo matplotlib.pyplot, que proporciona una interfaz sencilla para crear gráficas. Convencionalmente se importa con el alias plt.

La función principal para crear un histograma es plt.hist(). En su forma más simple, toma un único argumento: el array de datos que desea graficar.

Dado que estamos en un entorno no interactivo, no podemos mostrar la gráfica directamente con plt.show(). En su lugar, debemos guardar la gráfica en un archivo usando plt.savefig().

Actualice su archivo main.py con el siguiente código. Añade la lógica de graficación de Matplotlib al código de generación de datos del paso anterior.

import numpy as np
import matplotlib.pyplot as plt

## Generate sample data
data = np.random.normal(loc=0, scale=1, size=1000)

## Create a histogram
plt.hist(data)

## Save the plot to a file
plt.savefig('/home/labex/project/histogram.png')

print("Basic histogram saved to histogram.png")

Ahora, ejecute el script nuevamente desde la terminal:

python3 main.py

Debería ver la siguiente salida:

Basic histogram saved to histogram.png

Aparecerá un nuevo archivo llamado histogram.png en el explorador de archivos de la izquierda. Haga doble clic en él para abrir y ver su primer histograma. Mostrará la distribución de frecuencia de los datos aleatorios que generó.

Histogram

Establecer número de contenedores (bins) usando el parámetro bins

En este paso, aprenderá a controlar la granularidad de su histograma estableciendo el número de contenedores (bins). Un "bin" es un intervalo que representa un rango de datos. El número de contenedores puede afectar significativamente cómo se interpreta la distribución. Muy pocos contenedores pueden ocultar detalles importantes, mientras que demasiados pueden crear una gráfica ruidosa.

La función plt.hist() de Matplotlib tiene un parámetro bins que le permite especificar el número de contenedores. Por defecto, Matplotlib elige un número razonable, pero a menudo querrá ajustarlo.

Modifiquemos el código para crear un histograma con 30 contenedores. También lo guardaremos en un nuevo archivo, histogram_bins.png, para compararlo con la gráfica anterior.

Actualice su archivo main.py de la siguiente manera:

import numpy as np
import matplotlib.pyplot as plt

## Generate sample data
data = np.random.normal(loc=0, scale=1, size=1000)

## Create a histogram with 30 bins
plt.hist(data, bins=30)

## Save the plot to a new file
plt.savefig('/home/labex/project/histogram_bins.png')

print("Histogram with 30 bins saved to histogram_bins.png")

Ejecute el script desde la terminal:

python3 main.py

La salida será:

Histogram with 30 bins saved to histogram_bins.png

Ahora, busque histogram_bins.png en el explorador de archivos y ábralo. Compárelo con el primer histograma. Debería notar que las barras son más estrechas, proporcionando una vista más detallada de la distribución de los datos.

Histogram with 30 bins

Personalizar color y borde del histograma

En este paso, personalizará la apariencia visual del histograma. Una gráfica bien estilizada es más fácil de leer y más profesional. La función plt.hist() ofrece varios parámetros para el estilo, incluyendo color para el relleno de las barras y edgecolor para los bordes de las barras.

Cambiemos el color de las barras a un azul claro y añadamos bordes negros para que cada contenedor destaque más claramente.

Modifique su archivo main.py para incluir estos nuevos parámetros. Guardaremos esta gráfica personalizada en histogram_color.png.

import numpy as np
import matplotlib.pyplot as plt

## Generate sample data
data = np.random.normal(loc=0, scale=1, size=1000)

## Create a histogram with 30 bins, custom color, and edgecolor
plt.hist(data, bins=30, color='skyblue', edgecolor='black')

## Save the plot to a new file
plt.savefig('/home/labex/project/histogram_color.png')

print("Styled histogram saved to histogram_color.png")

Ejecute el script en la terminal:

python3 main.py

Verá este mensaje:

Styled histogram saved to histogram_color.png

Abra el archivo recién creado histogram_color.png. Verá un histograma mucho más pulido con barras de color azul claro y contornos negros distintivos.

Styled histogram

Normalizar histograma usando density=True

En este paso, aprenderá a crear un histograma normalizado. Por defecto, el eje y de un histograma representa el recuento de puntos de datos en cada contenedor (bin). Sin embargo, a veces es más útil ver la distribución como una densidad de probabilidad. En un histograma normalizado, la altura de cada barra se ajusta de modo que el área total de todas las barras sea igual a 1.

Esto se logra estableciendo el parámetro density en True en la función plt.hist(). También es una buena práctica añadir etiquetas y un título a su gráfica para que sea autoexplicativa.

Actualicemos el script para crear un histograma normalizado y añadir etiquetas descriptivas.

import numpy as np
import matplotlib.pyplot as plt

## Generate sample data
data = np.random.normal(loc=0, scale=1, size=1000)

## Create a normalized histogram
plt.hist(data, bins=30, color='skyblue', edgecolor='black', density=True)

## Add title and labels
plt.title('Normalized Histogram of Sample Data')
plt.xlabel('Value')
plt.ylabel('Probability Density')

## Save the plot to a new file
plt.savefig('/home/labex/project/histogram_normalized.png')

print("Normalized histogram saved to histogram_normalized.png")

Ejecute la versión final de su script:

python3 main.py

La salida será:

Normalized histogram saved to histogram_normalized.png

Abra histogram_normalized.png. Observe que los valores del eje y son ahora mucho más pequeños. Representan la densidad de probabilidad, no los recuentos brutos. La forma general de la distribución sigue siendo la misma, pero la escala ahora está estandarizada, lo cual es útil para comparar distribuciones de conjuntos de datos de diferentes tamaños.

Normalized histogram

Resumen

¡Felicitaciones por completar este laboratorio! Ha aprendido las habilidades esenciales para crear y personalizar histogramas con Matplotlib en Python.

En este laboratorio, usted:

  • Generó datos de muestra usando numpy.random.normal().
  • Graficó un histograma básico con plt.hist().
  • Controló el número de contenedores (bins) usando el parámetro bins.
  • Estilizó su histograma con los parámetros color y edgecolor.
  • Creó un histograma de densidad de probabilidad normalizado usando density=True.
  • Añadió un título y etiquetas a su gráfica para un mejor contexto.

Los histogramas son una herramienta fundamental en la exploración y el análisis de datos. Las técnicas que ha aprendido aquí le permitirán visualizar eficazmente la distribución de sus propios conjuntos de datos. No dude en seguir experimentando con otros parámetros y tipos de gráficas en Matplotlib.