Matplotlib Básico
Un gráfico bien hecho comunica en 2 segundos lo que una tabla de números tarda 2 minutos. Matplotlib es la biblioteca de visualización más importante de Python — todo lo que ves en Seaborn, pandas plots, y la mayoría de gráficos científicos está construido sobre ella. Dominar Matplotlib es dominar la comunicación visual de datos.
Concepto teórico
La anatomía de un gráfico Matplotlib
Cada gráfico de Matplotlib tiene una estructura jerárquica que necesitás entender para poder personalizar cualquier aspecto:
- Figure (la ventana): el contenedor principal. Pensalo como el "lienzo" o la "hoja" completa.
- Axes (el gráfico): el área donde se dibujan los datos. Una Figure puede tener múltiples Axes (subplots).
- Axis (los ejes X e Y): las líneas con marcas numéricas y etiquetas.
- Artistas: todo lo visible — barras, líneas, puntos, texto, leyendas, títulos.
Axes (con 'e') es el gráfico completo
(¡nombre confuso, pero así lo llama Matplotlib!). Axis (sin 'e') es un eje específico (X o Y). Si
leés documentación, esta distinción es crítica.Las dos interfaces de Matplotlib
| Interfaz | Estilo | Cuándo usarla | Ejemplo |
|---|---|---|---|
| pyplot (plt.) | Simple, imperativo | Gráficos rápidos, exploración | plt.plot(x, y) |
| OO (fig, ax) | Explícito, control total | Gráficos complejos, subplots, personalización | fig, ax = plt.subplots() |
plt.plot() es más rápido.
Para gráficos de producción y reportes, la interfaz OO (fig, ax) te da control total. En esta
lección usaremos plt para arrancar rápido, y la interfaz OO cuando necesitemos más control.Los 5 gráficos esenciales
| Tipo | Método | Uso |
|---|---|---|
| Líneas | plt.plot() |
Tendencias temporales (ventas por mes) |
| Barras | plt.bar() |
Comparar categorías (ventas por sucursal) |
| Dispersión | plt.scatter() |
Relación entre 2 variables (ingreso vs gasto) |
| Histograma | plt.hist() |
Distribución de datos (distribución de edades) |
| Torta | plt.pie() |
Composición porcentual (market share) |
Ejemplos explicados paso a paso
Ejemplo 1: Gráfico de líneas — Ventas mensuales
El gráfico más clásico para mostrar tendencias en el tiempo. Incluye título, labels y grid.
Hacé clic en ▶ Ejecutar
Ejemplo 2: Gráfico de barras — Ranking de sucursales
Perfecto para comparar categorías. Agregamos colores condicionales y etiquetas de valor sobre cada barra.
Hacé clic en ▶ Ejecutar
Ejemplo 3: Scatter plot — Relación entre variables
¿Existe relación entre ingreso y gasto? El scatter plot muestra la distribución de puntos y permite detectar patrones.
Hacé clic en ▶ Ejecutar
Ejemplo 4: Histograma — Distribución de datos
¿Los saldos se concentran en un rango o están dispersos? El histograma te muestra la forma de la distribución.
Hacé clic en ▶ Ejecutar
bins = 1 + log2(n). Para 250 datos
≈ 9 bins. Sin embargo, entre 20 y 30 bins suele funcionar bien en la práctica. Experimentá con el valor.Ejemplo 5: Subplots — Múltiples gráficos en una figura
Un dashboard típico tiene varios gráficos lado a lado. La interfaz OO (fig, ax) te permite
crearlos con subplots().
Hacé clic en ▶ Ejecutar
Referencia rápida
| Elemento | Código | Qué hace |
|---|---|---|
| Crear figura | plt.figure(figsize=(8,4)) |
Tamaño del lienzo |
| Líneas | plt.plot(x, y) |
Gráfico de líneas |
| Barras | plt.bar(x, y) |
Barras verticales |
| Dispersión | plt.scatter(x, y) |
Nube de puntos |
| Histograma | plt.hist(data, bins=20) |
Distribución |
| Torta | plt.pie(vals, labels=...) |
Composición % |
| Título | plt.title("Texto") |
Título del gráfico |
| Ejes | plt.xlabel() / ylabel() |
Labels de ejes |
| Grilla | plt.grid(True, alpha=0.3) |
Líneas de referencia |
| Leyenda | plt.legend() |
Identificar series |
| Subplots | fig, ax = plt.subplots(r,c) |
Múltiples gráficos |
| Mostrar | plt.show() |
Renderizar el gráfico |
Ejercicios
Ejercicio 1: Gráfico de líneas simple
Graficá las ventas mensuales con plt.plot(). Agregá título y labels de ejes. Imprimí
Gráfico generado.
Hacé clic en ▶ Ejecutar
Ejercicio 2: Gráfico de barras
Creá un gráfico de barras con las ventas por ciudad. Imprimí Barras OK.
Hacé clic en ▶ Ejecutar
Ejercicio 3: Histograma
Generá un histograma de los saldos con 10 bins. Imprimí Histograma listo.
Hacé clic en ▶ Ejecutar
Ejercicio 4: Barras con colores condicionales
Graficá las ganancias. Si la ganancia es positiva, color verde. Si es negativa, color rojo. Imprimí
Colores aplicados.
Hacé clic en ▶ Ejecutar
Ejercicio 5: Scatter plot con título y grid
Graficá la relación entre antigüedad e ingreso con plt.scatter(). Incluí título, labels, grid.
Imprimí Scatter OK.
Hacé clic en ▶ Ejecutar
Ejercicio 6: Dos series en un mismo gráfico
Graficá ventas y gastos en el mismo gráfico de líneas. Usá leyenda para diferenciarlas. Imprimí
Doble serie OK.
Hacé clic en ▶ Ejecutar
Ejercicio 7: Histograma con mediana
Generá un histograma y agregá una línea vertical roja punteada en la mediana con plt.axvline().
Imprimí la mediana. Debe incluir 400.
Hacé clic en ▶ Ejecutar
Ejercicio 8: Barras horizontales ordenadas
Creá un plt.barh() horizontal con los vendedores ordenados de mayor a menor venta. Imprimí
Ranking OK.
Hacé clic en ▶ Ejecutar
Ejercicio 9: Gráfico de torta con autopct
Creá un pie chart con distribución de canales. Usá autopct='%1.0f%%'. Imprimí
Torta lista.
Hacé clic en ▶ Ejecutar
Ejercicio 10: Mini dashboard con subplots
Creá una figura con 2 subplots lado a lado: (1) barras de ventas por ciudad, (2) líneas de tendencia mensual.
Imprimí Dashboard OK.
Hacé clic en ▶ Ejecutar
Resumen y conexión
- Matplotlib tiene dos interfaces:
plt.(rápido) yfig, ax(control total). - Líneas para tendencias temporales, barras para comparar categorías, scatter para relaciones, histograma para distribuciones, pie para composición.
- Siempre incluí título, labels de ejes y leyenda — un gráfico sin contexto no comunica nada.
plt.subplots(filas, cols)crea dashboards con múltiples gráficos.plt.tight_layout()evita que los labels se superpongan.- Usá
matplotlib.use('Agg')al inicio para renderizado sin ventana (headless).
En la siguiente lección (11 · Seaborn: visualización estadística) vas a aprender a crear gráficos estadísticos avanzados con mucho menos código. Seaborn se construye sobre Matplotlib y automatiza la mayoría de la personalización.
Recursos: Matplotlib Quick Start · Galería de ejemplos