Backends #

¿Qué es un back-end? #

Una gran cantidad de documentación en el sitio web y en las listas de correo se refiere al "backend" y muchos usuarios nuevos se confunden con este término. Matplotlib se dirige a muchos casos de uso y formatos de salida diferentes. Algunas personas usan Matplotlib de forma interactiva desde el shell de Python y tienen ventanas emergentes de trazado cuando escriben comandos. Algunas personas ejecutan cuadernos Jupyter y dibujan gráficos en línea para un análisis de datos rápido. Otros integran Matplotlib en interfaces gráficas de usuario como PyQt o PyGObject para crear aplicaciones ricas. Algunas personas usan Matplotlib en secuencias de comandos por lotes para generar imágenes posteriores a la secuencia de comandos a partir de simulaciones numéricas, y aún otras ejecutan servidores de aplicaciones web para generar gráficas dinámicamente.

Para admitir todos estos casos de uso, Matplotlib puede apuntar a diferentes salidas, y cada una de estas capacidades se denomina backend; el "frontend" es el código de cara al usuario, es decir, el código de trazado, mientras que el "backend" hace todo el trabajo duro entre bastidores para hacer la figura. Hay dos tipos de backends: backends de interfaz de usuario (para usar en PyQt/PySide, PyGObject, Tkinter, wxPython o macOS/Cocoa); también denominados "backends interactivos") y backends impresos para crear archivos de imagen (PNG, SVG, PDF, PS; también denominados "backends no interactivos").

Seleccionando un backend #

Hay tres formas de configurar su backend:

A continuación se muestra una descripción más detallada.

Si hay más de una configuración presente, la última de la lista tiene prioridad; por ejemplo, llamar matplotlib.use()anulará la configuración en su matplotlibrc.

Sin un backend establecido explícitamente, Matplotlib detecta automáticamente un backend utilizable en función de lo que está disponible en su sistema y de si ya se está ejecutando un bucle de eventos de GUI. Se selecciona el primer backend utilizable de la siguiente lista: MacOSX, QtAgg, GTK4Agg, Gtk3Agg, TkAgg, WxAgg, Agg. El último, Agg, es un backend no interactivo que solo puede escribir en archivos. Se usa en Linux, si Matplotlib no puede conectarse a una pantalla X o a una pantalla Wayland.

Aquí hay una descripción detallada de los métodos de configuración:

  1. Configuración rcParams["backend"]en su matplotlibrcarchivo:

    backend : qtagg   # use pyqt with antigrain (agg) rendering
    

    Consulte también Personalización de Matplotlib con hojas de estilo y rcParams .

  2. Configuración de laMPLBACKENDVariable ambiental:

    Puede configurar la variable de entorno para su shell actual o para un solo script.

    En Unix:

    > export MPLBACKEND=qtagg
    > python simple_plot.py
    
    > MPLBACKEND=qtagg python simple_plot.py
    

    En Windows, solo es posible lo primero:

    > set MPLBACKEND=qtagg
    > python simple_plot.py
    

    La configuración de esta variable de entorno anulará el backendparámetro en cualquier matplotlibrc archivo , incluso si hay uno matplotlibrcen su directorio de trabajo actual. Por lo tanto, establecerMPLBACKEND globalmente, por ejemplo, en su .bashrco .profile, se desaconseja, ya que podría conducir a un comportamiento contrario a la intuición.

  3. Si su secuencia de comandos depende de un backend específico, puede usar la función matplotlib.use():

    import matplotlib
    matplotlib.use('qtagg')
    

    Esto debe hacerse antes de crear cualquier figura, de lo contrario, Matplotlib puede fallar al cambiar el backend y generar un ImportError.

    El uso userequerirá cambios en su código si los usuarios desean usar un backend diferente. Por lo tanto, debe evitar llamar explícitamente a usemenos que sea absolutamente necesario.

Los backends incorporados #

De forma predeterminada, Matplotlib debería seleccionar automáticamente un backend predeterminado que permita tanto el trabajo interactivo como el trazado desde scripts, con salida a la pantalla y/o a un archivo, por lo que, al menos inicialmente, no tendrá que preocuparse por el backend. La excepción más común es si su distribución de Python viene sin tkintery no tiene instalado otro kit de herramientas GUI. Esto sucede en ciertas distribuciones de Linux, donde necesita instalar un paquete de Linux llamado python-tk(o similar).

Sin embargo, si desea escribir interfaces gráficas de usuario o un servidor de aplicaciones web ( incrustación en un servidor de aplicaciones web (Flask) ), o necesita una mejor comprensión de lo que está sucediendo, siga leyendo. Para hacer que las cosas sean más personalizables para las interfaces gráficas de usuario, Matplotlib separa el concepto de renderizador (lo que realmente hace el dibujo) del lienzo (el lugar donde va el dibujo). El renderizador canónico para interfaces de usuario es Aggel que utiliza la biblioteca C++ de Anti-Grain Geometry para crear una imagen de trama (píxel) de la figura; es utilizado por los backends QtAgg, GTK4Agg, GTK3Agg, wxAgg, TkAggy . macosxUn renderizador alternativo se basa en la biblioteca Cairo, utilizado por QtCairo, etc.

Para los motores de renderizado, los usuarios también pueden distinguir entre renderizadores vectoriales o rasterizados . Los lenguajes de gráficos vectoriales emiten comandos de dibujo como "dibuja una línea desde este punto hasta este punto" y, por lo tanto, no tienen escala. Los backends de trama generan una representación de píxeles de la línea cuya precisión depende de una configuración de DPI.

Aquí hay un resumen de los renderizadores de Matplotlib (hay un backend homónimo para cada uno; estos son backends no interactivos , capaces de escribir en un archivo):

renderizador

Tipos de archivo

Descripción

AGG

png

gráficos rasterizados : imágenes de alta calidad que utilizan el motor Anti-Grain Geometry .

PDF

pdf

gráficos vectoriales : salida en formato de documento portátil .

PD

pd, eps

gráficos vectoriales : salida PostScript .

SVG

SVG

gráficos vectoriales: salida de gráficos vectoriales escalables .

PGF

pgf, pdf

gráficos vectoriales -- utilizando el paquete pgf .

El Cairo

png, pd, pdf, svg

gráficos rasterizados o vectoriales , usando la biblioteca Cairo (requiere pycairo o cairocffi ).

Para guardar gráficos usando los backends no interactivos, use el matplotlib.pyplot.savefig('filename')método.

Estas son las interfaces de usuario y las combinaciones de procesadores admitidas; estos son backends interactivos , capaces de mostrarse en la pantalla y usar los renderizadores apropiados de la tabla anterior para escribir en un archivo:

back-end

Descripción

QtAgg

Representación de Agg en un lienzo Qt (requiere PyQt o Qt para Python , también conocido como PySide). Este backend se puede activar en IPython con .%matplotlib qt

ipympl

Representación de Agg incrustada en un widget de Jupyter (requiere ipympl ). Este backend se puede habilitar en un cuaderno Jupyter con .%matplotlib ipympl

GTK3Agg

Representación de Agg en un lienzo GTK 3.x (requiere PyGObject y pycairo ). Este backend se puede activar en IPython con .%matplotlib gtk3

GTK4Agg

Representación de Agg en un lienzo GTK 4.x (requiere PyGObject y pycairo ). Este backend se puede activar en IPython con .%matplotlib gtk4

Mac OS X

Representación de Agg en un lienzo Cocoa en OSX. Este backend se puede activar en IPython con .%matplotlib osx

TkAgg

Representación de Agg en un lienzo Tk (requiere TkInter ). Este backend se puede activar en IPython con .%matplotlib tk

nbAgg

Incruste una figura interactiva en un cuaderno clásico de Jupyter. Este backend se puede habilitar en portátiles Jupyter a través de .%matplotlib notebook

WebAgg

En show()se iniciará un servidor tornado con una figura interactiva.

GTK3Cairo

Representación de Cairo en un lienzo GTK 3.x (requiere PyGObject y pycairo ).

GTK4Cairo

Representación de Cairo en un lienzo GTK 4.x (requiere PyGObject y pycairo ).

wxAgg

Representación de Agg en un lienzo de wxWidgets (requiere wxPython 4). Este backend se puede activar en IPython con .%matplotlib wx

Nota

Los nombres de backends incorporados no distinguen entre mayúsculas y minúsculas; por ejemplo, 'QtAgg' y 'qtagg' son equivalentes.

ipympl #

El ecosistema de widgets de Jupyter se está moviendo demasiado rápido para ser compatible directamente con Matplotlib. Para instalar ipympl:

pip install ipympl

o

conda install ipympl -c conda-forge

Consulte la instalación de ipympl para obtener más detalles.

¿Cómo selecciono la implementación de Qt? #

Los backends de QtAgg y QtCairo son compatibles con Qt 5 y 6, así como con ambos enlaces de Python ( PyQt o Qt para Python , también conocido como PySide). Si ya se ha cargado algún enlace, se utilizará para el backend de Qt. De lo contrario, se usa el primer enlace disponible, en el orden: PyQt6, PySide6, PyQt5, PySide2.

losQT_APILa variable de entorno se puede configurar para anular la búsqueda cuando ya no se ha cargado nada. Puede establecerse en (sin distinción entre mayúsculas y minúsculas) PyQt6, PySide6, PyQt5 o PySide2 para elegir la versión y el enlace que se usará. Si la implementación elegida no está disponible, el backend de Qt no se cargará sin intentar ninguna otra implementación de Qt. Consulte Enlaces Qt para obtener más detalles.

Uso de backends no integrados #

En términos más generales, se puede seleccionar cualquier backend importable utilizando cualquiera de los métodos anteriores. Si name.of.the.backendes el módulo que contiene el backend, utilícelo module://name.of.the.backendcomo el nombre del backend, por ejemplo, matplotlib.use('module://name.of.the.backend').