Chiffres interactifs #
Lorsque vous travaillez avec des données, l'interactivité peut être inestimable. Les outils de panoramique/zoom et de localisation de la souris intégrés aux fenêtres de l'interface graphique Matplotlib sont souvent suffisants, mais vous pouvez également utiliser le système d'événements pour créer des outils d'exploration de données personnalisés.
Matplotlib est livré avec des backends liés à plusieurs kits d'outils d'interface graphique (Qt, Tk, Wx, GTK, macOS, JavaScript) et des packages tiers fournissent des liaisons à kivy et Jupyter Lab . Pour que les figures répondent aux événements de la souris, du clavier et de la peinture, la boucle d'événements de l'interface graphique doit être intégrée à une invite interactive. Nous vous recommandons d'utiliser IPython (voir ci- dessous ).
Le pyplot
module fournit des fonctions pour créer explicitement des figures qui incluent des outils interactifs, une barre d'outils, une info-bulle et
des raccourcis clavier :
pyplot.figure
Crée un nouveau vide
Figure
ou sélectionne une figure existantepyplot.subplots
pyplot
a une notion de "The Current Figure" accessible via pyplot.gcf
et une notion de "The Current Axes" accessible via pyplot.gca
. Presque toutes les fonctions pyplot
passent par le Figure
/ actuel Axes
(ou en créent un) selon le cas.
Matplotlib conserve une référence à toutes les figures ouvertes créées via pyplot.figure
ou pyplot.subplots
afin que les figures ne soient pas ramassées. Figure
s peuvent être fermés et désenregistrés pyplot
individuellement via
pyplot.close
; tous les Figure
s ouverts peuvent être fermés via plt.close('all')
.
Pour plus d'informations sur le système d'événements de Matplotlib et les boucles d'événements intégrées, veuillez lire :
Intégration IPython #
Nous vous recommandons d'utiliser IPython pour un shell interactif. En plus de toutes ses fonctionnalités (complétion améliorée des tabulations, magies, édition multiligne, etc.), il garantit également que la boucle d'événements de la boîte à outils de l'interface graphique est correctement intégrée à la ligne de commande (voir Intégration de l'invite de commande ).
Dans cet exemple, nous créons et modifions une figure via une invite IPython. La figure s'affiche dans une fenêtre d'interface graphique QtAgg. Pour configurer l'intégration et activer le mode interactif, utilisez la
%matplotlib
magie :
In [1]: %matplotlib
Using matplotlib backend: QtAgg
In [2]: import matplotlib.pyplot as plt
Créez une nouvelle fenêtre de figure :
In [3]: fig, ax = plt.subplots()
Ajoutez un graphique linéaire des données à la fenêtre :
In [4]: ln, = ax.plot(range(5))
Changez la couleur de la ligne du bleu à l'orange :
In [5]: ln.set_color('orange')
Si vous souhaitez désactiver le rafraîchissement automatique du tracé :
In [6]: plt.ioff()
Si vous souhaitez réactiver le rafraîchissement automatique du tracé :
In [7]: plt.ion()
Dans les versions récentes de Matplotlib
et IPython
, il suffit d'importer matplotlib.pyplot
et d'appeler pyplot.ion
. L'utilisation de la %
magie est garantie de fonctionner dans toutes les versions de Matplotlib et IPython.
Mode interactif #
Activer le mode interactif. |
|
Désactiver le mode interactif. |
|
Renvoie si les tracés sont mis à jour après chaque commande de traçage. |
Afficher tous les chiffres ouverts. |
|
Exécutez la boucle d'événements de l'interface graphique pendant des secondes d' intervalle . |
Contrôles du mode interactif :
si les figures créées sont automatiquement affichées
si les modifications apportées aux artistes déclenchent automatiquement le redessin des figures existantes
when
pyplot.show()
renvoie si aucun argument n'est fourni : immédiatement ou après la fermeture de tous les chiffres
Si en mode interactif :
les figures nouvellement créées seront affichées immédiatement
les figures se redessineront automatiquement lorsque des éléments seront modifiés
pyplot.show()
affiche les chiffres et revient immédiatement
Si pas en mode interactif :
les figures nouvellement créées et les modifications apportées aux figures ne sont pas affichées tant que
pyplot.show()
est appelépyplot.pause()
est appeléFigureCanvasBase.flush_events()
est appelé
pyplot.show()
exécute la boucle d'événements de l'interface graphique et ne revient pas tant que toutes les fenêtres de tracé ne sont pas fermées
Si vous êtes en mode non interactif (ou avez créé des figures en mode non interactif), vous devrez peut-être appeler explicitement pyplot.show
pour afficher les fenêtres sur votre écran. Si vous souhaitez uniquement exécuter la boucle d'événements de l'interface graphique pendant une durée déterminée, vous pouvez utiliser pyplot.pause
. Cela bloquera la progression de votre code comme si vous aviez appelé
time.sleep
, s'assurera que la fenêtre actuelle est affichée et redessinée si nécessaire, et exécutera la boucle d'événements de l'interface graphique pendant la période spécifiée.
La boucle d'événements de l'interface graphique étant intégrée à votre invite de commande et les chiffres étant en mode interactif sont indépendants les uns des autres. Si vous utilisez pyplot.ion
mais n'avez pas prévu l'intégration de la boucle d'événements, vos figures apparaîtront mais ne seront pas interactives pendant que l'invite attend une entrée. Vous ne pourrez pas effectuer de panoramique/zoom et la figure peut même ne pas être rendue (la fenêtre peut apparaître noire, transparente ou comme un instantané du bureau en dessous). Inversement, si vous configurez l'intégration de la boucle d'événements, les chiffres affichés seront réactifs en attendant une entrée à l'invite, quel que soit le "mode interactif" de pyplot.
Quelle que soit la combinaison du réglage du mode interactif et de l'intégration de la boucle d'événement, les figures seront réactives si vous utilisez pyplot.show(block=True)
, pyplot.pause
ou exécutez la boucle principale de l'interface graphique d'une autre manière.
Avertissement
Son utilisation Figure.show
permet d'afficher une figure à l'écran sans déclencher la boucle événementielle et sans être en mode interactif. Cela peut fonctionner (selon la boîte à outils de l'interface graphique) mais entraînera probablement un chiffre non réactif.
N° d'interface utilisateur par défaut
Les fenêtres créées par pyplot
ont une barre d'outils interactive avec des boutons de navigation et une lecture des valeurs de données sur lesquelles pointe le curseur. Un certain nombre de raccourcis clavier utiles sont enregistrés par défaut.
Autres invites Python #
Le mode interactif fonctionne dans l'invite Python par défaut :
>>> import matplotlib.pyplot as plt
>>> plt.ion()
>>>
cependant, cela ne garantit pas que le crochet d'événement est correctement installé et vos chiffres peuvent ne pas être réactifs. Veuillez consulter la documentation de votre boîte à outils GUI pour plus de détails.
Cahiers Jupyter / JupyterLab #
Noter
Pour obtenir la fonctionnalité interactive décrite ici, vous devez utiliser un backend interactif. Le backend par défaut dans les notebooks, le backend en ligne, ne l'est pas. backend_inline
rend la figure une fois et insère une image statique dans le cahier lorsque la cellule est exécutée. Parce que les images sont statiques, elles ne peuvent pas être panoramiques/zoomées, prendre l'entrée de l'utilisateur ou être mises à jour à partir d'autres cellules.
Pour obtenir des figures interactives dans le cahier "classique" ou le laboratoire Jupyter, utilisez le backend ipympl (doit être installé séparément) qui utilise le framework ipywidget . Si ipympl
est installé, utilisez la magie :
%matplotlib widget
pour le sélectionner et l'activer.
Si vous avez seulement besoin d'utiliser le carnet classique, vous pouvez utiliser
%matplotlib notebook
qui utilise le backend_nbagg
backend fourni par Matplotlib ; cependant, nbagg ne fonctionne pas dans Jupyter Lab.
Interfaces graphiques + Jupyter #
Vous pouvez également utiliser l'un des ipympl
backends non GUI dans un Jupyter Notebook. Si vous exécutez votre noyau Jupyter localement, la fenêtre de l'interface graphique apparaîtra sur votre bureau à côté de votre navigateur Web. Si vous exécutez votre ordinateur portable sur un serveur distant, le noyau essaiera d'ouvrir la fenêtre de l'interface graphique sur l'ordinateur distant. À moins que vous n'ayez prévu de rediriger le xserver vers votre bureau, vous ne pourrez pas voir ni interagir avec la fenêtre. Il peut également déclencher une exception.
PyCharm, Spyder et VSCode #
De nombreux IDE ont une intégration intégrée avec Matplotlib, veuillez consulter leur documentation pour les détails de configuration.