Introducción a Matplotlib
Aprende qué es Matplotlib, cómo funciona y cómo crear tus primeros gráficos en Python con ejemplos claros de líneas, etiquetas y subgráficos.
Matplotlib es la biblioteca de visualización de datos más utilizada en Python. Este capítulo explica qué es Matplotlib, cómo funciona su arquitectura central y cómo producir tus primeros gráficos, desde un gráfico de líneas mínimo hasta una figura con etiquetas y múltiples paneles. Los capítulos posteriores de esta sección profundizan en cada tipo de gráfico.
¿Qué es Matplotlib?
Matplotlib es una biblioteca Python de código abierto para crear visualizaciones estáticas, animadas e interactivas. John D. Hunter publicó la primera versión en 2003, inicialmente para replicar los comandos de graficado de MATLAB dentro de Python. Hoy en día sirve de base para muchas herramientas de visualización de nivel superior (Seaborn, Pandas .plot(), SciPy) y es el estándar de facto para figuras de calidad de publicación en ciencia e ingeniería.
¿Por qué usar Matplotlib?
- Amplia variedad de tipos de gráficos — líneas, dispersión, barras, histogramas, pasteles, cajas, violín, mapas de calor, contornos, superficies 3D y más.
- Control detallado — cada elemento de una figura (ejes, marcas de graduación, fuentes, colores, leyendas) es accesible y configurable.
- Múltiples formatos de salida — PNG, PDF, SVG, EPS y HTML interactivo (a través del backend
widget). - Integración con el ecosistema — funciona directamente con arrays de NumPy, DataFrames de Pandas y SciPy.
- Gratuito y de código abierto — licencia BSD, comunidad activa y documentación extensa.
¿Cuándo deberías elegir Matplotlib?
Usa Matplotlib cuando necesites un control preciso y listo para publicación sobre cada elemento visual, o cuando construyas sobre un sistema que requiera una biblioteca estable y con buen soporte. Para exploraciones rápidas con DataFrames, el método .plot() integrado de Pandas (que llama a Matplotlib por debajo) suele ser más rápido de escribir. Para gráficos estadísticos con una API de nivel superior, Seaborn es un complemento popular que todavía te permite volver a Matplotlib para ajustes finos.
Cómo está estructurado Matplotlib
Entender la arquitectura de dos capas de Matplotlib evita mucha confusión más adelante.
Los objetos Figure y Axes
Cada visualización de Matplotlib vive dentro de una Figure. Una Figure es el contenedor de nivel superior — piensa en ella como el lienzo. Dentro de una Figure colocas uno o más objetos Axes. Un Axes es el área de trazado real que contiene el eje x, el eje y, las marcas de graduación, las líneas de cuadrícula y los datos.
Figure
└── Axes (one or more)
├── x-axis (XAxis)
├── y-axis (YAxis)
├── Title
├── Lines / Patches / Collections (the plotted data)
└── LegendEstilo pyplot vs. estilo orientado a objetos
Matplotlib expone dos interfaces:
Estilo pyplot — un conjunto de funciones en matplotlib.pyplot que gestionan automáticamente la Figure y los Axes actuales. Esto imita el flujo de trabajo de MATLAB y es conveniente para scripts rápidos de un solo uso.
Estilo orientado a objetos (OO) — creas objetos Figure y Axes de forma explícita y llamas a métodos sobre ellos. Este es el estilo preferido en código de producción, funciones y cualquier script que cree más de una figura, porque deja claro exactamente sobre qué Axes actúa cada comando.
Ambos estilos producen resultados idénticos. Los ejemplos de este capítulo usan el estilo OO e indican dónde difiere el modo abreviado de pyplot.
Instalar Matplotlib
Matplotlib no forma parte de la biblioteca estándar de Python. Instálalo con pip:
pip install matplotlibSi usas Anaconda o Miniconda, Matplotlib viene incluido por defecto. Para instalarlo explícitamente:
conda install matplotlibVerifica la instalación:
python -c "import matplotlib; print(matplotlib.__version__)"Importar Matplotlib
La convención de importación estándar en toda la comunidad Python es:
Importación estándar de Matplotlib
import matplotlib.pyplot as pltEl alias plt es universal — todos los tutoriales, libros de texto y respuestas de Stack Overflow lo usan, así que mantenlo.
Si también necesitas NumPy (habitual para generar datos):
Importar Matplotlib y NumPy juntos
import numpy as np
import matplotlib.pyplot as pltTu primer gráfico
El script de Matplotlib más simple posible: dos listas de números, una llamada a plot() y una llamada a show().
Gráfico de líneas mínimo
import matplotlib.pyplot as plt
x = [0, 1, 2, 3, 4]
y = [0, 1, 4, 9, 16]
fig, ax = plt.subplots() # create Figure and Axes
ax.plot(x, y) # draw a line through the points
plt.show() # open the display window (scripts only)plt.subplots() devuelve una tupla (fig, ax). La mayoría del código en esta sección usa este patrón porque deja claro sobre qué Axes estás dibujando.
En notebooks de Jupyter plt.show() es opcional — los gráficos se renderizan en línea automáticamente cuando termina de ejecutarse una celda.
En scripts independientes plt.show() abre una ventana y pausa la ejecución hasta que se cierra la ventana. Sin ella, el script termina antes de que aparezca la ventana.
Agregar etiquetas y un título
Las etiquetas de los ejes y un título convierten un gráfico sin procesar en una figura legible.
Gráfico de líneas con etiquetas y título
import matplotlib.pyplot as plt
x = [0, 1, 2, 3, 4]
y = [0, 1, 4, 9, 16]
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlabel('x')
ax.set_ylabel('x squared')
ax.set_title('Square Numbers')
plt.show()| Método | Qué establece |
|---|---|
ax.set_xlabel('text') | Etiqueta en el eje horizontal |
ax.set_ylabel('text') | Etiqueta en el eje vertical |
ax.set_title('text') | Título encima del gráfico |
Consulta el capítulo Matplotlib Labels para opciones de tamaño de fuente, peso y posicionamiento.
Personalizar el estilo y el color de la línea
ax.plot() acepta argumentos de palabra clave que controlan la apariencia visual de la línea.
Línea roja discontinua
import matplotlib.pyplot as plt
x = [0, 1, 2, 3, 4]
y = [0, 1, 4, 9, 16]
fig, ax = plt.subplots()
ax.plot(x, y, color='red', linestyle='--', linewidth=2)
ax.set_title('Dashed Red Line')
plt.show()Valores comunes de linestyle: '-' (sólido, por defecto), '--' (discontinuo), ':' (punteado), '-.' (guion-punto).
Colores comunes por nombre: 'blue', 'red', 'green', 'orange', 'purple', 'black'. Los códigos hexadecimales como '#1f77b4' también funcionan.
Consulta Matplotlib Line y Matplotlib Markers para una lista completa de opciones de estilo.
Trazar múltiples líneas y agregar una leyenda
Llama a ax.plot() más de una vez para superponer varias líneas en el mismo Axes. Pasa label= a cada llamada y luego llama a ax.legend() para renderizar el cuadro de leyenda.
Dos líneas superpuestas con leyenda
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2 * np.pi, 100)
fig, ax = plt.subplots()
ax.plot(x, np.sin(x), label='sin(x)')
ax.plot(x, np.cos(x), label='cos(x)', linestyle='--')
ax.set_xlabel('Angle (radians)')
ax.set_ylabel('Value')
ax.set_title('Sine and Cosine')
ax.legend()
plt.show()np.linspace(0, 2 * np.pi, 100) crea 100 números igualmente espaciados de 0 a 2π — una forma conveniente de producir curvas suaves.
Crear subgráficos
plt.subplots(rows, cols) crea una cuadrícula de Axes dentro de una única Figure. Accedes a cada Axes mediante su índice.
Cuadrícula 2×2 de diferentes tipos de gráficos
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
fig, axs = plt.subplots(2, 2, figsize=(8, 6))
axs[0, 0].plot(x, y)
axs[0, 0].set_title('Line')
axs[0, 1].scatter(x[::5], y[::5]) # every 5th point
axs[0, 1].set_title('Scatter')
axs[1, 0].bar(['A', 'B', 'C'], [3, 7, 5])
axs[1, 0].set_title('Bar')
axs[1, 1].hist(np.random.randn(500), bins=20)
axs[1, 1].set_title('Histogram')
fig.tight_layout() # prevent overlapping labels
plt.show()fig.tight_layout() ajusta automáticamente el espaciado entre subgráficos para que los títulos y las etiquetas no se superpongan. Casi siempre es una buena idea llamarlo cuando se usan subgráficos.
Consulta Matplotlib Subplot para más información sobre diseños de cuadrícula, ejes compartidos y GridSpec.
Guardar figuras
Para guardar una figura en un archivo en lugar de mostrarla de forma interactiva, llama a fig.savefig() antes de plt.show().
Guardar una figura como PNG y PDF
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6])
ax.set_title('Saved Figure')
fig.savefig('my_plot.png', dpi=150) # raster: PNG at 150 DPI
fig.savefig('my_plot.pdf') # vector: PDF (no DPI needed)
plt.show()El argumento dpi (puntos por pulgada) controla la resolución para formatos raster. dpi=150 es un buen equilibrio entre tamaño de archivo y calidad de impresión; dpi=300 es el estándar para figuras de revistas científicas.
Los formatos compatibles incluyen PNG, PDF, SVG, EPS y TIFF. Matplotlib detecta el formato a partir de la extensión del archivo automáticamente.
Qué sigue
Este capítulo presentó los conceptos fundamentales de Matplotlib. El resto de la sección Python Matplotlib cubre cada tema en profundidad:
- Matplotlib Get Started — instalación y primeros pasos en detalle
- Matplotlib Pyplot — la interfaz pyplot explicada
- Matplotlib Plotting — fundamentos del trazado
- Matplotlib Line — gráficos de líneas y estilos
- Matplotlib Markers — marcadores de puntos de datos
- Matplotlib Labels — etiquetas de ejes, títulos y anotaciones
- Matplotlib Grid — agregar y estilizar líneas de cuadrícula
- Matplotlib Subplot — figuras de múltiples paneles
- Matplotlib Scatter — gráficos de dispersión
- Matplotlib Bars — gráficos de barras
- Matplotlib Histograms — gráficos de distribución
- Matplotlib Pie Charts — gráficos de pastel y dona