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 pyplotmodule 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 Figureou sélectionne une figure existante

pyplot.subplots

Crée un nouveau Figureet le remplit avec une grille deAxes

pyplota une notion de "The Current Figure" accessible via pyplot.gcfet une notion de "The Current Axes" accessible via pyplot.gca. Presque toutes les fonctions pyplotpassent 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.figureou pyplot.subplotsafin que les figures ne soient pas ramassées. Figures peuvent être fermés et désenregistrés pyplotindividuellement via pyplot.close; tous les Figures 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 %matplotlibmagie :

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 Matplotlibet IPython, il suffit d'importer matplotlib.pyplotet d'appeler pyplot.ion. L'utilisation de la %magie est garantie de fonctionner dans toutes les versions de Matplotlib et IPython.

Mode interactif #

pyplot.ion

Activer le mode interactif.

pyplot.ioff

Désactiver le mode interactif.

pyplot.isinteractive

Renvoie si les tracés sont mis à jour après chaque commande de traçage.

pyplot.show

Afficher tous les chiffres ouverts.

pyplot.pause

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()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.ionmais 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.pauseou exécutez la boucle principale de l'interface graphique d'une autre manière.

Avertissement

Son utilisation Figure.showpermet 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.

d'interface utilisateur par défaut

Les fenêtres créées par pyplotont 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 ipymplest 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_nbaggbackend fourni par Matplotlib ; cependant, nbagg ne fonctionne pas dans Jupyter Lab.

Interfaces graphiques + Jupyter #

Vous pouvez également utiliser l'un des ipymplbackends 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.