Backends #

Qu'est-ce qu'un back-end ? #

Une grande partie de la documentation sur le site Web et dans les listes de diffusion fait référence au "backend" et de nombreux nouveaux utilisateurs sont confus par ce terme. Matplotlib cible de nombreux cas d'utilisation et formats de sortie différents. Certaines personnes utilisent Matplotlib de manière interactive à partir du shell Python et font apparaître des fenêtres de traçage lorsqu'elles tapent des commandes. Certaines personnes exécutent des blocs-notes Jupyter et dessinent des tracés en ligne pour une analyse rapide des données. D'autres intègrent Matplotlib dans des interfaces utilisateur graphiques telles que PyQt ou PyGObject pour créer des applications riches. Certaines personnes utilisent Matplotlib dans des scripts batch pour générer des images postscript à partir de simulations numériques, et d'autres encore exécutent des serveurs d'applications Web pour servir dynamiquement des graphiques.

Pour prendre en charge tous ces cas d'utilisation, Matplotlib peut cibler différentes sorties, et chacune de ces fonctionnalités est appelée un backend ; le « frontend » est le code qui fait face à l'utilisateur, c'est-à-dire le code de traçage, tandis que le « backend » fait tout le travail acharné dans les coulisses pour créer la figure. Il existe deux types de backends : les backends d'interface utilisateur (à utiliser dans PyQt/PySide, PyGObject, Tkinter, wxPython ou macOS/Cocoa) ; également appelés "backends interactifs") et des backends papier pour créer des fichiers image (PNG, SVG, PDF, PS ; également appelés "backends non interactifs").

Sélection d'un backend #

Il existe trois façons de configurer votre backend :

Vous trouverez ci-dessous une description plus détaillée.

S'il y a plus d'une configuration présente, la dernière de la liste est prioritaire ; par exemple, l'appel matplotlib.use()remplacera le paramètre de votre fichier matplotlibrc.

Sans backend explicitement défini, Matplotlib détecte automatiquement un backend utilisable en fonction de ce qui est disponible sur votre système et si une boucle d'événement GUI est déjà en cours d'exécution. Le premier backend utilisable dans la liste suivante est sélectionné : MacOSX, QtAgg, GTK4Agg, Gtk3Agg, TkAgg, WxAgg, Agg. Le dernier, Agg, est un backend non interactif qui ne peut écrire que dans des fichiers. Il est utilisé sous Linux, si Matplotlib ne peut pas se connecter à un affichage X ou à un affichage Wayland.

Voici une description détaillée des méthodes de configuration :

  1. Réglage rcParams["backend"]dans votre matplotlibrcdossier :

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

    Voir aussi Personnalisation de Matplotlib avec des feuilles de style et rcParams .

  2. Réglage de laMPLBACKENDvariables d'environnement :

    Vous pouvez définir la variable d'environnement soit pour votre shell actuel, soit pour un seul script.

    Sous Unix :

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

    Sous Windows, seul le premier est possible :

    > set MPLBACKEND=qtagg
    > python simple_plot.py
    

    La définition de cette variable d'environnement remplacera le backendparamètre dans any matplotlibrc , même s'il existe un matplotlibrcdans votre répertoire de travail actuel. Par conséquent, la miseMPLBACKEND globalement, par exemple dans votre .bashrcou .profile, est déconseillé car cela pourrait conduire à un comportement contre-intuitif.

  3. Si votre script dépend d'un backend spécifique vous pouvez utiliser la fonction matplotlib.use():

    import matplotlib
    matplotlib.use('qtagg')
    

    Cela doit être fait avant la création de toute figure, sinon Matplotlib risque de ne pas basculer le backend et de déclencher une ImportError.

    L'utilisation usenécessitera des modifications dans votre code si les utilisateurs souhaitent utiliser un backend différent. Par conséquent, vous devez éviter d'appeler explicitement à usemoins que cela ne soit absolument nécessaire.

Les backends intégrés #

Par défaut, Matplotlib devrait automatiquement sélectionner un backend par défaut qui permet à la fois le travail interactif et le traçage à partir de scripts, avec une sortie à l'écran et/ou dans un fichier, donc au moins au début, vous n'aurez pas à vous soucier du backend. L'exception la plus courante est si votre distribution Python est livrée sans tkinteret si vous n'avez pas d'autre boîte à outils d'interface graphique installée. Cela se produit sur certaines distributions Linux, où vous devez installer un package Linux nommé python-tk(ou similaire).

Si, toutefois, vous souhaitez écrire des interfaces utilisateur graphiques ou un serveur d'applications Web ( Intégration dans un serveur d'applications Web (Flask) ), ou avez besoin d'une meilleure compréhension de ce qui se passe, lisez la suite. Pour rendre les choses facilement plus personnalisables pour les interfaces utilisateur graphiques, Matplotlib sépare le concept de moteur de rendu (ce qui fait réellement le dessin) du canevas (l'endroit où va le dessin). Le moteur de rendu canonique pour les interfaces utilisateur Aggutilise la bibliothèque Anti-Grain Geometry C++ pour créer une image raster (pixel) de la figure ; il est utilisé par les backends QtAgg, GTK4Agg, GTK3Agg, wxAgg, TkAgget macosx. Un moteur de rendu alternatif est basé sur la bibliothèque Cairo, utilisée par QtCairo, etc.

Pour les moteurs de rendu, les utilisateurs peuvent également faire la distinction entre les moteurs de rendu vectoriels ou raster . Les langages graphiques vectoriels émettent des commandes de dessin telles que "tracer une ligne de ce point à ce point" et sont donc sans échelle. Les backends raster génèrent une représentation en pixels de la ligne dont la précision dépend d'un paramètre DPI.

Voici un résumé des moteurs de rendu Matplotlib (il existe un backend éponyme pour chacun ; ce sont des backends non interactifs , capables d'écrire dans un fichier) :

Moteur de rendu

Types de fichier

La description

AGG

png

graphiques raster - images de haute qualité utilisant le moteur de géométrie anti-grain .

PDF

pdf

graphiques vectoriels - sortie au format de document portable .

PS

ps, eps

graphiques vectoriels -- sortie PostScript .

SVG

svg

graphiques vectoriels - Sortie de graphiques vectoriels évolutifs .

FGP

pgf, pdf

graphiques vectoriels - en utilisant le package pgf .

Caire

png, ps, pdf, svg

graphiques raster ou vectoriels - à l'aide de la bibliothèque Cairo (nécessite pycairo ou cairocffi ).

Pour enregistrer des tracés à l'aide des backends non interactifs, utilisez la matplotlib.pyplot.savefig('filename')méthode.

Il s'agit des interfaces utilisateur et des combinaisons de moteur de rendu prises en charge ; ce sont des backends interactifs , capables d'afficher à l'écran et d'utiliser les moteurs de rendu appropriés du tableau ci-dessus pour écrire dans un fichier :

Backend

La description

QtAgg

Rendu Agg dans un canevas Qt (nécessite PyQt ou Qt pour Python , alias PySide). Ce backend peut être activé dans IPython avec .%matplotlib qt

ipympl

Rendu Agg intégré dans un widget Jupyter (nécessite ipympl ). Ce backend peut être activé dans un notebook Jupyter avec .%matplotlib ipympl

GTK3Agg

Rendu agrégé sur un canevas GTK 3.x (nécessite PyGObject et pycairo ). Ce backend peut être activé dans IPython avec .%matplotlib gtk3

GTK4Agg

Rendu agrégé sur un canevas GTK 4.x (nécessite PyGObject et pycairo ). Ce backend peut être activé dans IPython avec .%matplotlib gtk4

Mac OS X

Rendu Agg dans un canevas Cocoa sous OSX. Ce backend peut être activé dans IPython avec .%matplotlib osx

TkAggName

Rendu agrégé à un canevas Tk (nécessite TkInter ). Ce backend peut être activé dans IPython avec .%matplotlib tk

nbAgg

Intégrez une figure interactive dans un cahier classique Jupyter. Ce backend peut être activé dans les notebooks Jupyter via .%matplotlib notebook

WebAggName

On show()va démarrer un serveur tornade avec une figure interactive.

GTK3Le Caire

Rendu du Caire sur un canevas GTK 3.x (nécessite PyGObject et pycairo ).

GTK4Le Caire

Rendu du Caire sur un canevas GTK 4.x (nécessite PyGObject et pycairo ).

wxAgg

Rendu agrégé à un canevas wxWidgets (nécessite wxPython 4). Ce backend peut être activé dans IPython avec .%matplotlib wx

Noter

Les noms des backends intégrés ne sont pas sensibles à la casse ; par exemple, 'QtAgg' et 'qtagg' sont équivalents.

ipympl #

L'écosystème de widgets Jupyter évolue trop rapidement pour être pris en charge directement dans Matplotlib. Pour installer ipympl :

pip install ipympl

ou

conda install ipympl -c conda-forge

Voir installer ipympl pour plus de détails.

Comment sélectionner l'implémentation de Qt ? #

Les backends QtAgg et QtCairo prennent en charge à la fois Qt 5 et 6, ainsi que les deux liaisons Python ( PyQt ou Qt pour Python , alias PySide). Si une liaison a déjà été chargée, elle sera utilisée pour le backend Qt. Sinon, la première liaison disponible est utilisée, dans l'ordre : PyQt6, PySide6, PyQt5, PySide2.

LaQT_APILa variable d'environnement peut être définie pour remplacer la recherche lorsque rien n'a déjà été chargé. Il peut être défini sur (insensible à la casse) PyQt6, PySide6, PyQt5 ou PySide2 pour choisir la version et la liaison à utiliser. Si l'implémentation choisie n'est pas disponible, le backend Qt ne pourra pas se charger sans essayer d'autres implémentations Qt. Voir Liaisons Qt pour plus de détails.

Utilisation de backends non intégrés #

Plus généralement, tout backend importable peut être sélectionné en utilisant l'une des méthodes ci-dessus. Si name.of.the.backendest le module contenant le backend, utilisez module://name.of.the.backendcomme nom de backend, par exemple matplotlib.use('module://name.of.the.backend').