BioData Insights

Visualización de Datos con Matplotlib y Seaborn

Aprende a transformar datos en gráficos informativos. Cubriremos la creación de gráficos de barras para comparaciones e histogramas para entender la distribución de tus datos biológicos.

Visualización de Datos: Contando Historias con Gráficos

"Una imagen vale más que mil palabras", y en ciencia de datos, una buena visualización vale más que mil filas de una tabla. La visualización de datos es el proceso de representar información gráficamente para identificar patrones, tendencias, relaciones y anomalías que serían difíciles de detectar en datos crudos.

En Python, las dos bibliotecas reinas para esto son:

  • Matplotlib: Es la biblioteca "abuela" de la visualización en Python. Es increíblemente potente y ofrece un control total sobre cada elemento de un gráfico (ejes, etiquetas, colores, etc.).
  • Seaborn: Es una biblioteca construida sobre Matplotlib. Utiliza Matplotlib para dibujar los gráficos, pero ofrece una interfaz más simple y funciones especializadas para crear gráficos estadísticos complejos y estéticamente más agradables con menos código.

Comenzaremos usando Matplotlib para entender los fundamentos de la creación de gráficos.


# Nota: Este código está listo para ser copiado y ejecutado en un notebook de Google Colab.
# En Colab, los gráficos se mostrarán automáticamente después de la celda de código.

# Importamos el módulo 'pyplot' de Matplotlib, con el alias convencional 'plt'.
import matplotlib.pyplot as plt
import pandas as pd

# Creamos un DataFrame de ejemplo, simulando la eficacia de diferentes fungicidas.
# Este es el tipo de datos categóricos que se presta bien a un gráfico de barras.
data = {'Fungicida': ['A', 'B', 'C', 'Control'],
        'Eficacia_porcentaje': [85, 92, 78, 5]}
df_fungicidas = pd.DataFrame(data)

# --- Creación de un Gráfico de Barras ---
# 1. Creamos una figura y un conjunto de ejes. plt.figure() es como tomar un lienzo en blanco.
# figsize=(10, 6) define el tamaño del gráfico en pulgadas (ancho, alto) para que sea legible.
plt.figure(figsize=(10, 6))

# 2. Dibujamos el gráfico. plt.bar() es la función para crear un gráfico de barras.
# El primer argumento es la categoría para el eje X.
# El segundo argumento es el valor numérico para la altura de las barras en el eje Y.
# 'color' nos permite asignar colores a cada barra para una mejor diferenciación.
plt.bar(df_fungicidas['Fungicida'], df_fungicidas['Eficacia_porcentaje'], color=['#4285F4', '#34A853', '#FBBC05', '#EA4335'])

# 3. Añadimos contexto. Un gráfico sin etiquetas es inútil.
plt.xlabel('Tratamiento Aplicado', fontsize=12) # Etiqueta para el eje X.
plt.ylabel('Eficacia en Reducción de Enfermedad (%)', fontsize=12) # Etiqueta para el eje Y.
plt.title('Comparación de Eficacia de Fungicidas', fontsize=16, fontweight='bold') # Título del gráfico.
plt.ylim(0, 100) # Establecemos los límites del eje Y de 0 a 100. Es importante para no exagerar las diferencias.
plt.grid(axis='y', linestyle='--', alpha=0.7) # Añadimos una cuadrícula horizontal para facilitar la lectura de los valores.

# 4. Mostramos el gráfico. En un script, esto abriría una ventana. En Colab, lo renderiza en la salida.
plt.show()

# En un entorno no interactivo, podemos guardar la figura en un archivo.
# plt.savefig('grafico_fungicidas.png')

print("El código anterior genera un gráfico de barras para comparar la eficacia de los fungicidas.")
print("La visualización es clave para comunicar resultados de forma clara y rápida a una audiencia.")

# >> Salida:
# (Se mostraría el gráfico de barras generado)
# El código anterior genera un gráfico de barras para comparar la eficacia de los fungicidas.
# La visualización es clave para comunicar resultados de forma clara y rápida a una audiencia.
Histogramas: Entendiendo la Distribución de tus Datos

Un histograma es una de las herramientas más importantes en el análisis exploratorio de datos (EDA). A diferencia de un gráfico de barras que compara categorías, un histograma nos muestra la distribución de una única variable numérica continua. Agrupa los números en "contenedores" (o `bins`) de un rango definido y cuenta cuántos valores caen en cada contenedor.

Esto nos permite responder preguntas fundamentales sobre nuestros datos: ¿Son los valores simétricos (como en una distribución normal o "campana de Gauss")? ¿Están sesgados hacia un lado? ¿Hay valores atípicos (outliers) muy lejos del resto? Entender la distribución es fundamental antes de aplicar pruebas estadísticas o modelos de aprendizaje automático, ya que muchos de ellos asumen que los datos siguen una distribución específica.


# Nota: Este código está listo para ser copiado y ejecutado en un notebook de Google Colab.

import matplotlib.pyplot as plt
import numpy as np

# Generamos datos simulados. Imaginemos que medimos el diámetro (en mm) de 100 lesiones de una enfermedad en hojas.
# np.random.normal() genera datos que siguen una distribución normal (gaussiana).
# 'loc' es la media (centro de la distribución), 'scale' es la desviación estándar (dispersión), 'size' es el número de muestras.
diametro_lesiones = np.random.normal(loc=15.0, scale=4.0, size=100)

# Creamos la figura para el histograma.
plt.figure(figsize=(10, 6))

# plt.hist() es la función que crea el histograma.
# 1er argumento: los datos que queremos visualizar.
# 'bins=15': divide el rango total de datos en 15 "contenedores" o barras. Juega con este número.
# 'color' y 'edgecolor' personalizan la apariencia del gráfico para mayor claridad.
# 'alpha' controla la transparencia de las barras.
plt.hist(diametro_lesiones, bins=15, color='skyblue', edgecolor='black', alpha=0.8)

# Añadimos una línea vertical para marcar la media (promedio) de los datos.
# Esto nos da un punto de referencia central. 'linestyle' la hace punteada.
plt.axvline(diametro_lesiones.mean(), color='red', linestyle='dashed', linewidth=2)
# Añadimos texto para explicar qué es la línea roja.
plt.text(diametro_lesiones.mean()*1.1, 15, f'Media: {diametro_lesiones.mean():.2f} mm', color='red')


# Añadimos títulos y etiquetas para dar contexto al gráfico.
plt.title('Distribución del Diámetro de Lesiones en Hojas', fontsize=16, fontweight='bold')
plt.xlabel('Diámetro de la Lesión (mm)')
plt.ylabel('Frecuencia (Número de Lesiones)')

# Mostramos el gráfico.
plt.show()

print("Este código genera un histograma que nos permite 'ver' la forma de nuestros datos.")
print("Podríamos identificar si la mayoría de las lesiones son pequeñas, grandes o se agrupan en torno a un tamaño medio.")

# >> Salida:
# (Se mostraría el histograma con la línea de la media)
# Este código genera un histograma que nos permite 'ver' la forma de nuestros datos.
# Podríamos identificar si la mayoría de las lesiones son pequeñas, grandes o se agrupan en torno a un tamaño medio.