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:
El
rcParams["backend"]
parámetro en sumatplotlibrc
archivolos
MPLBACKEND
Variable ambientalLa función
matplotlib.use()
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:
Configuración
rcParams["backend"]
en sumatplotlibrc
archivo:backend : qtagg # use pyqt with antigrain (agg) rendering
Consulte también Personalización de Matplotlib con hojas de estilo y rcParams .
Configuración de la
MPLBACKEND
Variable 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
backend
parámetro en cualquiermatplotlibrc
archivo , incluso si hay unomatplotlibrc
en su directorio de trabajo actual. Por lo tanto, establecerMPLBACKEND
globalmente, por ejemplo, en su.bashrc
o.profile
, se desaconseja, ya que podría conducir a un comportamiento contrario a la intuición.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
use
requerirá cambios en su código si los usuarios desean usar un backend diferente. Por lo tanto, debe evitar llamar explícitamente ause
menos 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 tkinter
y 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 Agg
el 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
, TkAgg
y
. macosx
Un 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 . |
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
. |
ipympl |
Representación de Agg incrustada en un widget de Jupyter (requiere ipympl ). Este backend se puede habilitar en un cuaderno Jupyter con
. |
GTK3Agg |
Representación de Agg en un lienzo GTK 3.x (requiere PyGObject y
pycairo ). Este backend se puede activar en IPython con
. |
GTK4Agg |
Representación de Agg en un lienzo GTK 4.x (requiere PyGObject y
pycairo ). Este backend se puede activar en IPython con
. |
Mac OS X |
Representación de Agg en un lienzo Cocoa en OSX. Este backend se puede activar en IPython con . |
TkAgg |
Representación de Agg en un lienzo Tk (requiere TkInter ). Este backend se puede activar en IPython con . |
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
. |
WebAgg |
En |
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 . |
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_API
La 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.backend
es el módulo que contiene el backend, utilícelo module://name.of.the.backend
como el nombre del backend, por ejemplo,
matplotlib.use('module://name.of.the.backend')
.