Lección 12 de 29Módulo 3: Visualización de Datos

12. Introducción a Matplotlib

Gráficos de línea, barras, scatter y personalización básica

20 minutos

Aprende a crear gráficos profesionales con Matplotlib, la librería de visualización más usada en Python.

Primeros gráficos

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# Datos de ejemplo
meses = ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun']
ventas = [45000, 52000, 48000, 61000, 55000, 70000]

# Gráfico de línea básico
plt.figure(figsize=(10, 6))
plt.plot(meses, ventas, marker='o', linewidth=2, markersize=8)
plt.title('Ventas Mensuales 2024', fontsize=16, fontweight='bold')
plt.xlabel('Mes', fontsize=12)
plt.ylabel('Ventas ($)', fontsize=12)
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

# Gráfico de barras
plt.figure(figsize=(10, 6))
plt.bar(meses, ventas, color='steelblue', alpha=0.7)
plt.title('Ventas por Mes')
plt.ylabel('Ventas ($)')
plt.show()

# Gráfico de dispersión
x = np.random.rand(50) * 100
y = x * 2 + np.random.randn(50) * 10

plt.figure(figsize=(8, 6))
plt.scatter(x, y, alpha=0.6, s=100, c='coral')
plt.title('Relación Inversión vs ROI')
plt.xlabel('Inversión ($)')
plt.ylabel('ROI (%)')
plt.show()

Múltiples gráficos (subplots)

fig, axes = plt.subplots(2, 2, figsize=(12, 10))

# Subplot 1: Línea
axes[0, 0].plot(meses, ventas, marker='o')
axes[0, 0].set_title('Ventas Mensuales')

# Subplot 2: Barras
axes[0, 1].bar(meses, ventas)
axes[0, 1].set_title('Ventas por Mes')

# Subplot 3: Pie
axes[1, 0].pie(ventas, labels=meses, autopct='%1.1f%%')
axes[1, 0].set_title('Distribución de Ventas')

# Subplot 4: Histograma
datos = np.random.randn(1000)
axes[1, 1].hist(datos, bins=30, alpha=0.7)
axes[1, 1].set_title('Distribución Normal')

plt.tight_layout()
plt.show()

Personalización avanzada

plt.figure(figsize=(12, 6))

# Múltiples líneas
plt.plot(meses, ventas, label='Ventas Reales', marker='o', linewidth=2)
plt.plot(meses, [v * 0.9 for v in ventas], label='Objetivo', linestyle='--', marker='s')

plt.title('Ventas vs Objetivo', fontsize=18, pad=20)
plt.xlabel('Mes', fontsize=14)
plt.ylabel('Monto ($)', fontsize=14)
plt.legend(fontsize=12, loc='best')
plt.grid(True, alpha=0.3, linestyle=':', linewidth=0.8)

# Anotaciones
max_venta = max(ventas)
max_mes = meses[ventas.index(max_venta)]
plt.annotate(f'Máximo: ${max_venta:,}',
             xy=(max_mes, max_venta),
             xytext=(max_mes, max_venta + 5000),
             arrowprops=dict(arrowstyle='->', color='red'),
             fontsize=12, color='red')

plt.tight_layout()
plt.savefig('ventas_2024.png', dpi=300, bbox_inches='tight')
plt.show()

Estilos predefinidos

# Ver estilos disponibles
print(plt.style.available)

# Usar un estilo
plt.style.use('seaborn-v0_8-darkgrid')
# o 'ggplot', 'fivethirtyeight', etc.

plt.figure(figsize=(10, 6))
plt.plot(meses, ventas, marker='o')
plt.title('Ventas con Estilo Seaborn')
plt.show()

# Resetear a default
plt.style.use('default')

Resumen de la lección

plt.plot() crea gráficos de línea ✅ plt.bar() crea gráficos de barras ✅ plt.scatter() crea gráficos de dispersión ✅ subplots() permite múltiples gráficos en una figura ✅ Personaliza con title, xlabel, ylabel, legend, grid ✅ Guarda gráficos con savefig()


🎯 Próxima lección: 13. Gráficos Avanzados con Seaborn

En la siguiente lección crearás visualizaciones estadísticas profesionales con Seaborn. 🚀

Checkpoint de comprensión

3 preguntas para verificar lo aprendido. No afecta tu nota del examen final.

1¿Cuál es la importación estándar de Matplotlib en data science?
2¿Cuándo usar plot de líneas vs scatter plot vs bar chart?
3¿Qué hace `plt.savefig("grafico.png", dpi=300, bbox_inches="tight")`?

¿Completaste esta lección?

Marca esta lección como completada. Tu progreso se guardará en tu navegador.