Descripción del curso Matplotlib
Matplotlib es una biblioteca de Python especializada en la generación de gráficos y visualizaciones de datos. Es ampliamente utilizada en ciencia de datos, ingeniería y disciplinas que requieren análisis visual.
¿Qué es Matplotlib?
Matplotlib proporciona una interfaz para crear gráficos estáticos, animados e interactivos en Python. Se inspira en MATLAB, ofreciendo una sintaxis similar para aquellos familiarizados con ese entorno. Permite generar una amplia variedad de gráficos, desde simples gráficos de líneas hasta visualizaciones complejas en 3D.
Instalación de Matplotlib
Para instalar Matplotlib, se utiliza el gestor de paquetes pip:
pip install matplotlib
O, si se utiliza Anaconda:
conda install matplotlib
Arquitectura de Matplotlib
Figure, Axes y Artist
En Matplotlib, todo gráfico se compone de tres niveles jerárquicos:
- Figure: El contenedor de nivel superior que alberga todo el gráfico. Puede contener uno o múltiples Axes.
- Axes: El área donde se dibujan los datos. Cada Axes tiene sus propios ejes X e Y, título y leyenda.
- Artist: Todo lo que se dibuja en la figura (líneas, textos, marcadores) es un Artist.
import matplotlib.pyplot as plt
# Crear figura y ejes usando la API orientada a objetos
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [1, 4, 9])
ax.set_title("Mi primer gráfico")
plt.show()
pyplot vs API orientada a objetos
Matplotlib ofrece dos interfaces principales:
- pyplot: Interfaz de estilo MATLAB, funciones globales como
plt.plot(), ideal para gráficos rápidos. - API orientada a objetos: Trabaja directamente con objetos Figure y Axes, recomendada para gráficos complejos y reutilizables.
# Estilo pyplot
plt.plot(x, y)
plt.title("Título")
plt.show()
# Estilo orientado a objetos (recomendado)
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title("Título")
plt.show()
Creación de gráficos
Gráfico de líneas
Un gráfico de líneas es útil para mostrar tendencias a lo largo de un eje, generalmente el tiempo.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [10, 15, 13, 17, 20]
plt.plot(x, y, color='steelblue', linewidth=2, marker='o')
plt.xlabel('Tiempo')
plt.ylabel('Valor')
plt.title('Gráfico de líneas simple')
plt.show()
Gráfico de dispersión
Visualiza la relación entre dos variables numéricas.
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randn(100)
y = x + np.random.randn(100) * 0.5
plt.scatter(x, y, c=y, cmap='viridis', alpha=0.7)
plt.colorbar(label='Valor Y')
plt.xlabel('Variable X')
plt.ylabel('Variable Y')
plt.title('Gráfico de dispersión')
plt.show()
Gráfico de barras
Se utiliza para comparar cantidades entre diferentes categorías.
import matplotlib.pyplot as plt
categorias = ['A', 'B', 'C', 'D']
valores = [4, 7, 1, 8]
plt.bar(categorias, valores, color=['#3498db', '#e74c3c', '#2ecc71', '#f39c12'])
plt.xlabel('Categorías')
plt.ylabel('Valores')
plt.title('Gráfico de barras')
plt.show()
Personalización de gráficos
Títulos, etiquetas y leyendas
Es importante añadir títulos y etiquetas para facilitar la interpretación.
plt.title('Título del gráfico', fontsize=16, fontweight='bold')
plt.xlabel('Etiqueta del eje X', fontsize=12)
plt.ylabel('Etiqueta del eje Y', fontsize=12)
plt.legend(loc='upper right', frameon=True)
Estilos y hojas de estilo
Matplotlib ofrece estilos predefinidos que transforman la apariencia de los gráficos.
plt.style.use('seaborn-v0_8')
plt.plot(x, y, color='red', linewidth=2, linestyle='--')
Anotaciones
Para resaltar puntos específicos o añadir notas explicativas.
plt.plot(x, y)
plt.annotate('Punto importante', xy=(2, 15), xytext=(3, 20),
arrowprops=dict(facecolor='black', shrink=0.05),
fontsize=12)
plt.show()
Subplots y layouts
Permiten mostrar varios gráficos en una sola figura.
fig, axs = plt.subplots(2, 2, figsize=(10, 8))
axs[0, 0].plot(x, y)
axs[0, 0].set_title('Líneas')
axs[0, 1].bar(categorias, valores)
axs[0, 1].set_title('Barras')
axs[1, 0].scatter(x, y)
axs[1, 0].set_title('Dispersión')
axs[1, 1].hist(np.random.randn(1000), bins=30)
axs[1, 1].set_title('Histograma')
plt.tight_layout()
plt.show()
Gráficos 3D
Matplotlib permite crear gráficos en tres dimensiones mediante el toolkit mpl_toolkits.mplot3d.
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
ax.plot_surface(X, Y, Z, cmap='viridis')
plt.show()
Guardar gráficos en diferentes formatos
Es posible exportar gráficos a múltiples formatos de archivo.
fig.savefig('grafico.png', dpi=300, bbox_inches='tight')
fig.savefig('grafico.pdf', bbox_inches='tight')
fig.savefig('grafico.svg', bbox_inches='tight')
Integración con Pandas
Matplotlib se integra bien con Pandas para visualizar datos de DataFrames directamente.
import pandas as pd
df = pd.DataFrame({
'Año': [2018, 2019, 2020, 2021],
'Ventas': [250, 300, 400, 350]
})
df.plot(x='Año', y='Ventas', kind='bar', figsize=(8, 5))
plt.show()
Animaciones
Matplotlib permite crear animaciones con FuncAnimation.
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
line, = ax.plot([], [])
def update(frame):
x = np.linspace(0, 2*np.pi, 100)
line.set_data(x, np.sin(x + frame/10))
return line,
ani = FuncAnimation(fig, update, frames=100, interval=50, blit=True)
plt.show()
Mejores prácticas
- Usar la API orientada a objetos para gráficos complejos y reutilizables.
- Aplicar
tight_layout()oconstrained_layoutpara evitar superposiciones. - Elegir colormaps adecuados según el tipo de datos (secuencial, divergente, cualitativo).
- Exportar en formato vectorial (SVG, PDF) para publicaciones de alta calidad.
Recursos adicionales
- Documentación oficial: matplotlib.org
- Galería de ejemplos: matplotlib.org/stable/gallery
Lecciones y tutoriales de Matplotlib
Ejercicios de programación de Matplotlib
Módulos del curso
Explora todos los módulos disponibles en este curso de Matplotlib
Explorar más tecnologías
Descubre más tecnologías de programación y desarrollo de software
Alan Sastre
Ingeniero de Software y formador, CEO en CertiDevs
Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, Matplotlib es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.