Backends e integración con entornos

Básico
Matplotlib
Matplotlib
Actualizado: 18/04/2026

¿Qué es un backend en Matplotlib?

Un backend en Matplotlib es el componente responsable de convertir la representación interna de un gráfico (objetos Figure, Axes, Artists) en una imagen visible, ya sea mostrándola en una ventana interactiva o guardándola en un archivo.

Matplotlib separa claramente dos responsabilidades:

  • Frontend (interfaz de usuario): la API de alto nivel con la que trabajamos (pyplot, Figure, Axes).
  • Backend (renderizador): el motor que genera la imagen final.

Esta separación permite que el mismo código de gráficos funcione en distintos entornos sin modificaciones.

Tipos de backends

Los backends se dividen en dos grandes categorías:

Backends interactivos (GUI): muestran el gráfico en una ventana emergente y permiten interactividad como zoom, desplazamiento y guardado desde la barra de herramientas.

| Backend | Descripción | |---------|-------------| | TkAgg | Basado en Tkinter, disponible en casi todos los sistemas | | Qt5Agg | Basado en PyQt5/PySide2, muy completo | | WXAgg | Basado en wxPython | | MacOSX | Nativo en macOS, muy rápido |

Backends no interactivos (de archivo): generan imágenes estáticas para guardar en disco, sin mostrar ventanas.

| Backend | Formato de salida | |---------|------------------| | Agg | PNG (rasterizado, uso general) | | PDF | PDF (vectorial) | | SVG | SVG (vectorial, web) | | PS | PostScript (impresión) |

Consultar y cambiar el backend

import matplotlib
import matplotlib.pyplot as plt

# Consultar el backend activo
print(matplotlib.get_backend())

# Cambiar el backend ANTES de importar pyplot
import matplotlib
matplotlib.use('Agg')   # No interactivo, genera imágenes PNG
import matplotlib.pyplot as plt

plt.plot([1, 2, 3], [4, 5, 6])
plt.savefig('salida.png')
plt.close()

Importante: matplotlib.use() debe llamarse antes de import matplotlib.pyplot as plt. Una vez iniciado pyplot, cambiar el backend puede generar errores.

Backends en Jupyter Notebook

Jupyter Notebook es el entorno más popular para trabajar con Matplotlib de forma interactiva. Se configura con los llamados magic commands:

# Modo inline: los gráficos se muestran debajo de la celda (estático)
%matplotlib inline

# Modo widget: gráficos interactivos en el notebook (requiere ipympl)
%matplotlib widget

# Modo notebook: interactividad básica dentro del notebook
%matplotlib notebook

El modo inline es el más habitual. Los gráficos se renderizan como imágenes PNG incrustadas en el notebook:

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 100)
plt.plot(x, np.sin(x))
plt.title('Función seno en Jupyter')
plt.show()

Para gráficos interactivos con zoom y herramientas, instala ipympl y usa el modo widget:

pip install ipympl
%matplotlib widget
import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()
ax.plot(np.linspace(0, 10, 300), np.sin(np.linspace(0, 10, 300)))
ax.set_title('Gráfico interactivo con ipympl')
plt.show()

Modo interactivo: ion() e ioff()

Matplotlib tiene un modo interactivo que actualiza automáticamente la ventana del gráfico cada vez que se añade un nuevo elemento, sin necesidad de llamar a plt.show() al final.

import matplotlib.pyplot as plt
import numpy as np
import time

# Activar modo interactivo
plt.ion()

fig, ax = plt.subplots()
x = np.linspace(0, 2 * np.pi, 100)
line, = ax.plot(x, np.sin(x))
ax.set_title('Actualización en tiempo real')

# Actualizar el gráfico en un bucle (simula datos en tiempo real)
for phase in np.linspace(0, 2 * np.pi, 30):
    line.set_ydata(np.sin(x + phase))
    plt.pause(0.05)   # Pausa y actualiza la ventana

# Desactivar modo interactivo
plt.ioff()
plt.show()

plt.pause(t) pausa la ejecución t segundos y actualiza todos los gráficos abiertos, lo que lo hace ideal para animaciones simples o monitorización en tiempo real.

Configurar el backend por defecto en matplotlibrc

Para evitar tener que cambiar el backend en cada script, se puede configurar el valor por defecto en el archivo de configuración matplotlibrc:

import matplotlib

# Localizar el archivo de configuración
print(matplotlib.matplotlib_fname())

El archivo se puede editar manualmente para añadir o modificar:

backend : TkAgg

También se puede configurar mediante la variable de entorno:

# En Linux/macOS
export MPLBACKEND=Agg

# En Windows (PowerShell)
$env:MPLBACKEND = "Agg"

Uso en scripts de Python (sin entorno gráfico)

En servidores, sistemas CI/CD o contenedores Docker que no tienen pantalla, hay que usar obligatoriamente un backend no interactivo:

import matplotlib
matplotlib.use('Agg')   # Sin pantalla, sin ventana
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 200)
y = np.exp(-x / 5) * np.cos(2 * x)

plt.figure(figsize=(10, 5))
plt.plot(x, y, color='teal', linewidth=2)
plt.title('Oscilación amortiguada')
plt.xlabel('Tiempo')
plt.ylabel('Amplitud')
plt.grid(True, alpha=0.3)

# Guardar directamente (no plt.show())
plt.savefig('oscilacion_amortiguada.png', dpi=150, bbox_inches='tight')
plt.close()
print("Imagen guardada exitosamente.")

Integración con VS Code y PyCharm

En Visual Studio Code con la extensión de Python instalada, los gráficos se muestran automáticamente en el panel de salida. Si se trabaja con archivos .py, los gráficos aparecen en una ventana emergente del sistema operativo (backend TkAgg o equivalente). Si se trabaja con Jupyter Notebooks dentro de VS Code, aplican los mismos magic commands que en el Jupyter estándar.

En PyCharm, la configuración del backend se gestiona automáticamente por la IDE. Los gráficos aparecen en el panel SciView o en ventanas emergentes, dependiendo de la versión del IDE.

Selección práctica de backend según entorno

| Entorno | Backend recomendado | Comando de configuración | |---------|--------------------|-----------------------------| | Jupyter Notebook | inline o widget | %matplotlib inline | | Script interactivo | TkAgg o Qt5Agg | matplotlib.use('TkAgg') | | Servidor sin pantalla | Agg | matplotlib.use('Agg') | | Generación PDF | PDF | matplotlib.use('PDF') | | Generación SVG | SVG | matplotlib.use('SVG') |

Alan Sastre - Autor del tutorial

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.

Más tutoriales de Matplotlib

Explora más contenido relacionado con Matplotlib y continúa aprendiendo con nuestros tutoriales gratuitos.

Aprendizajes de esta lección

Entender qué es un backend en Matplotlib y para qué sirve. Distinguir entre backends interactivos y no interactivos. Configurar el backend adecuado según el entorno de trabajo. Usar el magic %matplotlib en Jupyter Notebook. Activar y desactivar el modo interactivo con ion() e ioff().