Matplotlib: Evaluación Matplotlib
Certifícate en uso de Matplotlib con Python para el análisis de datos completando estas lecciones y ejercicios de programación.
Aprende Matplotlib GRATIS y certifícateMatplotlib es una biblioteca de visualización de datos fundamental en el ecosistema de Python. Dominar esta herramienta no solo mejora tus habilidades de análisis de datos, sino que también aumenta tu valor como profesional en ciencia de datos. Esta guía abarca todos los conceptos esenciales que necesitas conocer para obtener una certificación en Matplotlib.
Fundamentos de Matplotlib
La arquitectura de Matplotlib está estructurada en tres niveles principales: el backend (motor de renderizado), el nivel de artista (elementos de bajo nivel) y la interfaz pyplot (API de alto nivel). Es fundamental comprender cómo estos niveles interactúan entre sí.
import matplotlib.pyplot as plt
import numpy as np
# Nivel pyplot (alto nivel)
plt.figure(figsize=(10, 6))
plt.plot([1, 2, 3, 4], [10, 20, 25, 30], label='Datos de ejemplo')
plt.title('Gráfico básico')
plt.xlabel('Eje X')
plt.ylabel('Eje Y')
plt.legend()
plt.show()
# Nivel de artista (orientado a objetos)
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot([1, 2, 3, 4], [10, 20, 25, 30], label='Datos de ejemplo')
ax.set_title('Gráfico usando la API orientada a objetos')
ax.set_xlabel('Eje X')
ax.set_ylabel('Eje Y')
ax.legend()
plt.show()
El concepto de Figure y Axes es crucial para entender Matplotlib. La Figure es el contenedor de alto nivel que puede contener múltiples ejes (Axes), mientras que cada Axes representa un gráfico individual dentro de la figura.
Tipos de gráficos esenciales
Dominar los tipos de gráficos fundamentales es un requisito para cualquier certificación. Estos incluyen:
Gráficos de líneas
Los gráficos de líneas representan datos continuos conectados por líneas. Son ideales para mostrar tendencias a lo largo del tiempo.
# Datos de ejemplo
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
plt.figure(figsize=(10, 6))
plt.plot(x, y1, label='Seno', color='blue', linestyle='-', linewidth=2, marker='o', markersize=4)
plt.plot(x, y2, label='Coseno', color='red', linestyle='--', linewidth=2, marker='s', markersize=4)
plt.title('Funciones trigonométricas')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.grid(True)
plt.show()
Gráficos de dispersión
Los gráficos de dispersión muestran la relación entre dos variables como puntos en un plano cartesiano. Son útiles para identificar correlaciones.
# Datos aleatorios
np.random.seed(42)
x = np.random.rand(50)
y = x + np.random.normal(0, 0.3, 50)
colors = np.random.rand(50)
sizes = 1000 * np.random.rand(50)
plt.figure(figsize=(10, 6))
plt.scatter(x, y, c=colors, s=sizes, alpha=0.7, cmap='viridis')
plt.colorbar(label='Valor de color')
plt.title('Gráfico de dispersión')
plt.xlabel('Variable X')
plt.ylabel('Variable Y')
plt.grid(True, linestyle='--', alpha=0.7)
plt.show()
Gráficos de barras
Los gráficos de barras comparan cantidades discretas entre categorías diferentes.
categorias = ['A', 'B', 'C', 'D', 'E']
valores = [25, 40, 30, 55, 15]
plt.figure(figsize=(10, 6))
bars = plt.bar(categorias, valores, width=0.6, color='skyblue', edgecolor='navy', linewidth=1.5)
# Añadir etiquetas de valor sobre cada barra
for bar in bars:
height = bar.get_height()
plt.text(bar.get_x() + bar.get_width()/2., height + 1,
f'{height}', ha='center', va='bottom')
plt.title('Gráfico de barras')
plt.xlabel('Categorías')
plt.ylabel('Valores')
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()
Histogramas
Los histogramas visualizan la distribución de un conjunto de datos continuos.
# Generar datos con distribución normal
data = np.random.normal(0, 1, 1000)
plt.figure(figsize=(10, 6))
plt.hist(data, bins=30, color='purple', alpha=0.7, edgecolor='black')
plt.title('Histograma de distribución normal')
plt.xlabel('Valor')
plt.ylabel('Frecuencia')
plt.axvline(data.mean(), color='red', linestyle='dashed', linewidth=2, label=f'Media: {data.mean():.2f}')
plt.axvline(np.median(data), color='green', linestyle='dashed', linewidth=2, label=f'Mediana: {np.median(data):.2f}')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
Gráficos de pastel
Los gráficos de pastel muestran las proporciones de diferentes categorías en relación con el total.
categorias = ['Categoría A', 'Categoría B', 'Categoría C', 'Categoría D']
valores = [35, 25, 20, 20]
explode = (0.1, 0, 0, 0) # Destacar la primera porción
plt.figure(figsize=(10, 6))
plt.pie(valores, explode=explode, labels=categorias, autopct='%1.1f%%',
shadow=True, startangle=90, colors=['#ff9999', '#66b3ff', '#99ff99', '#ffcc99'])
plt.axis('equal') # Para que el gráfico sea circular
plt.title('Gráfico de pastel')
plt.show()
Gráficos de caja (Boxplots)
Los boxplots muestran la distribución de los datos mediante cuartiles y valores atípicos.
# Generar datos para diferentes grupos
data = [np.random.normal(0, std, 100) for std in range(1, 5)]
labels = ['Grupo A', 'Grupo B', 'Grupo C', 'Grupo D']
plt.figure(figsize=(10, 6))
plt.boxplot(data, labels=labels, patch_artist=True,
boxprops=dict(facecolor='lightblue'),
medianprops=dict(color='red', linewidth=2))
plt.title('Gráficos de caja')
plt.xlabel('Grupos')
plt.ylabel('Distribución')
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()
Mapas de calor
Los mapas de calor visualizan datos matriciales donde los colores representan valores.
# Crear datos de matriz
matriz = np.random.rand(10, 12)
plt.figure(figsize=(12, 8))
plt.imshow(matriz, cmap='viridis')
plt.colorbar(label='Valor')
plt.title('Mapa de calor')
plt.xlabel('Columnas')
plt.ylabel('Filas')
plt.grid(False)
plt.show()
Personalización avanzada
La personalización es un aspecto crucial de Matplotlib. Debes dominar cómo ajustar todos los elementos visuales para mejorar la comunicación de los datos.
Estilo y apariencia
Matplotlib ofrece diferentes estilos predefinidos y permite crear estilos personalizados.
# Ver estilos disponibles
print(plt.style.available)
# Usar un estilo predefinido
plt.style.use('ggplot')
# Crear una figura con el estilo aplicado
plt.figure(figsize=(10, 6))
plt.plot(np.linspace(0, 10, 100), np.sin(np.linspace(0, 10, 100)))
plt.title('Gráfico con estilo ggplot')
plt.show()
# Restaurar estilo por defecto
plt.style.use('default')
Control de colores
El manejo de colores es esencial para crear visualizaciones efectivas y accesibles.
# Diferentes formas de especificar colores
colores = ['red', '#00FF00', (0, 0, 1), (1, 0, 1, 0.5)] # Nombre, hex, RGB, RGBA
labels = ['Rojo', 'Verde', 'Azul', 'Magenta (50% transparente)']
plt.figure(figsize=(10, 6))
for i, (color, label) in enumerate(zip(colores, labels)):
plt.plot([0, 1], [i, i], color=color, linewidth=5, label=label)
plt.yticks(range(len(colores)), labels)
plt.title('Diferentes formas de especificar colores')
plt.legend()
plt.grid(False)
plt.show()
Mapas de colores (Colormaps)
Los mapas de colores son paletas que asignan valores numéricos a colores. Son cruciales para visualizaciones científicas.
# Crear figura para mostrar diferentes mapas de colores
cmaps = ['viridis', 'plasma', 'inferno', 'magma', 'cividis',
'Blues', 'Greens', 'Reds', 'YlOrBr', 'coolwarm']
fig, axes = plt.subplots(len(cmaps), 1, figsize=(12, 12))
fig.subplots_adjust(hspace=0.3)
# Datos para visualizar
data = np.linspace(0, 1, 100).reshape(1, -1)
data = np.vstack((data, data))
# Mostrar cada mapa de colores
for i, cmap_name in enumerate(cmaps):
axes[i].imshow(data, cmap=cmap_name, aspect='auto')
axes[i].set_title(cmap_name)
axes[i].set_yticks([])
plt.tight_layout()
plt.show()
Personalización de texto y anotaciones
Las anotaciones permiten destacar y explicar características importantes en tus gráficos.
x = np.linspace(0, 10, 100)
y = np.sin(x)
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(x, y)
# Añadir título y etiquetas con propiedades personalizadas
ax.set_title('Función Seno con Anotaciones', fontsize=16, fontweight='bold')
ax.set_xlabel('Ángulo (rad)', fontsize=12)
ax.set_ylabel('Valor', fontsize=12)
# Añadir texto en una posición arbitraria
ax.text(2, 0.5, 'Punto máximo local', fontsize=12,
bbox=dict(facecolor='yellow', alpha=0.5))
# Añadir anotación con flecha
ax.annotate('Punto mínimo local',
xy=(6.3, -1), # Coordenadas del punto a señalar
xytext=(7, -0.5), # Coordenadas del texto
arrowprops=dict(facecolor='black', shrink=0.05, width=1.5),
fontsize=12)
# Añadir una ecuación matemática usando LaTeX
ax.text(5, 0.8, r'$y = \sin(x)$', fontsize=14)
plt.grid(True)
plt.show()
Elementos decorativos
Los elementos decorativos como líneas de referencia, áreas sombreadas y marcadores mejorarán tus visualizaciones.
x = np.linspace(0, 10, 100)
y = np.sin(x)
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(x, y, 'b-', label='Seno')
# Añadir líneas horizontales y verticales
ax.axhline(y=0, color='black', linestyle='-', alpha=0.3)
ax.axhline(y=0.5, color='red', linestyle='--', alpha=0.7)
ax.axvline(x=np.pi, color='green', linestyle='--', alpha=0.7)
# Añadir áreas sombreadas
ax.axvspan(2, 4, alpha=0.2, color='yellow')
ax.axhspan(-0.5, 0.5, alpha=0.2, color='lightblue')
# Añadir flechas y formas
from matplotlib.patches import Arrow, Rectangle, Ellipse
# Añadir una flecha
ax.add_patch(Arrow(7, 0.5, 1, 0.2, width=0.2, color='purple'))
# Añadir un rectángulo
ax.add_patch(Rectangle((1, -0.5), 1, 0.3, fill=True, color='green', alpha=0.5))
# Añadir una elipse
ax.add_patch(Ellipse((5, 0.5), 0.5, 0.3, fill=True, color='orange', alpha=0.5))
ax.set_title('Gráfico con elementos decorativos')
ax.legend()
ax.grid(True)
plt.show()
Múltiples gráficos y ejes
Aprender a crear múltiples gráficos en una sola figura es esencial para comparar diferentes conjuntos de datos.
Subplots básicos
`
Lecciones de este módulo de Matplotlib
Lecciones de programación del módulo Evaluación Matplotlib del curso de Matplotlib.
Ejercicios de programación en este módulo de Matplotlib
Evalúa tus conocimientos en Evaluación Matplotlib con ejercicios de programación Evaluación Matplotlib de tipo Test, Puzzle, Código y Proyecto con VSCode.