Objectif de «% matplotlib inline»


483

Quelqu'un pourrait-il m'expliquer à quoi sert exactement %matplotlib inline?


22
C'est une fonction magique qui rend la figure dans un cahier (au lieu d'afficher un vidage de l'objet figure). Un didacticiel Matplotlib simple se trouve ici data-blogger.com/2017/11/15/… .
www.data-blogger.com

7
Vous pouvez vérifier les backends disponibles (comme inline) en entrant: %matplotlib --list.
Luis

Réponses:


286

%matplotlibest une fonction magique dans IPython. Je citerai la documentation pertinente ici pour que vous puissiez la lire pour plus de commodité:

IPython possède un ensemble de «fonctions magiques» prédéfinies que vous pouvez appeler avec une syntaxe de style de ligne de commande. Il existe deux types de magie, orientée ligne et orientée cellule. Les magies de ligne sont préfixées du caractère% et fonctionnent un peu comme les appels de ligne de commande du système d'exploitation: elles obtiennent comme argument le reste de la ligne, où les arguments sont passés sans parenthèses ni guillemets. La magie des lignes peut renvoyer des résultats et peut être utilisée dans le côté droit d'une affectation. Les magies cellulaires sont préfixées avec un double %%, et ce sont des fonctions qui obtiennent comme argument non seulement le reste de la ligne, mais aussi les lignes en dessous dans un argument séparé.

%matplotlib inline définit le backend de matplotlib sur le backend 'inline' :

Avec ce backend, la sortie des commandes de traçage est affichée en ligne dans les frontends comme le bloc-notes Jupyter, directement sous la cellule de code qui l'a produite. Les tracés résultants seront ensuite également stockés dans le document du carnet.

Lorsque vous utilisez le backend «en ligne», vos graphiques matplotlib seront inclus dans votre bloc-notes, à côté du code. Il peut être utile de lire également Comment faire en sorte que le plot matplotlib du bloc-notes IPython soit en ligne pour savoir comment l'utiliser dans votre code.

Si vous souhaitez également l'interactivité, vous pouvez utiliser le backend nbagg avec %matplotlib notebook(dans IPython 3.x), comme décrit ici .


4
% matplotlib inline ^ SyntaxError: syntaxe invalide

4
@Jadda Utilisez-vous IPython? Sinon, vous obtiendrez une erreur de syntaxe, car ce n'est pas un CPython valide (l'interpréteur «standard» pour Python). Cela ne sert à rien de l'utiliser de toute façon, sauf si vous utilisez un bloc-notes IPython, car le but est de rendre les tracés en ligne avec un bloc-notes.
Aurora0001

Oui. J'utilise ceci dans Spyder IDE (partie d'Anaconda) pour implémenter l'API de détection d'objets

3
Dans ce cas, @Jadda, il semble que vous ayez une nouvelle question à poser. Vous devez y inclure tous les détails pertinents afin que vous puissiez obtenir plus d'attention pour votre question que dans les commentaires de cette réponse. Bonne chance.
Aurora0001

2
ok, mais quelle est l'alternative: comment puis-je voir les parcelles s'il n'y a pas une telle magie activée?
JaakL

77

À condition que vous exécutiez IPython, le %matplotlib inlinefera apparaître vos sorties de tracé et sera stocké dans le bloc-notes.

Selon la documentation

Pour configurer cela, avant d'effectuer un traçage ou une importation de, matplotlibvous devez exécuter le %matplotlib magic command. Cela effectue la configuration nécessaire en arrière-plan pour qu'IPython fonctionne correctement de pair avec matplotlib; cependant, il n'exécute aucune commande d'importation Python, c'est-à-dire qu'aucun nom n'est ajouté à l'espace de noms.

Un backend particulièrement intéressant, fourni par IPython, est le inlinebackend. Cette option n'est disponible que pour le bloc-notes Jupyter et la console Jupyter QtConsole. Il peut être invoqué comme suit:

%matplotlib inline

Avec ce backend, la sortie des commandes de traçage est affichée en ligne dans les frontends comme le bloc-notes Jupyter, directement sous la cellule de code qui l'a produite. Les tracés résultants seront ensuite également stockés dans le document du carnet.


32

Si vous souhaitez ajouter des tracés à votre bloc-notes Jupyter, %matplotlib inlinec'est une solution standard. Et il existe d'autres commandes magiques à utiliser de manière matplotlibinteractive dans Jupyter.

%matplotlib: toute pltcommande de tracé entraînera maintenant l'ouverture d'une fenêtre de figure, et d'autres commandes peuvent être exécutées pour mettre à jour le tracé. Certaines modifications ne seront pas dessinées automatiquement, pour forcer une mise à jour, utilisezplt.draw()

%matplotlib notebook: conduira à des tracés interactifs intégrés dans le cahier, vous pouvez zoomer et redimensionner la figure

%matplotlib inline: dessinez uniquement des images statiques dans le bloc-notes


7

À partir d'IPython 5.0 et de matplotlib 2.0, vous pouvez éviter d'utiliser la magie spécifique d'IPython et une utilisation matplotlib.pyplot.ion()/matplotlib.pyplot.ioff()qui présente également les avantages de travailler en dehors d'IPython.

documents ipython


Je pense que c'est différent de changer le backend. À moins que le backend ne le soit inline, les tracés sont générés dans les fenêtres externes et vous devez utiliser display () pour les afficher dans le bloc-notes.
Vincenzooo

5

Cela signifie simplement que tout graphique que nous créons dans le cadre de notre code apparaîtra dans le même cahier et non dans une fenêtre distincte, ce qui se produirait si nous n'avions pas utilisé cette déclaration magique.


4

Si vous ne savez pas ce qu'est le backend, vous pouvez lire ceci: https://matplotlib.org/tutorials/introductory/usage.html#backends

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 graphiques en ligne pour une analyse rapide des données. D'autres intègrent matplotlib dans des interfaces utilisateur graphiques comme wxpython ou pygtk 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 capacités est appelée backend; le "frontend" est le code utilisé par l'utilisateur, c'est-à-dire le code de traçage, tandis que le "backend" fait tout le travail difficile en arrière-plan pour créer la figure.

Ainsi, lorsque vous tapez% matplotlib inline, cela active le backend en ligne. Comme discuté dans les articles précédents:

Avec ce backend, la sortie des commandes de traçage est affichée en ligne dans les frontends comme le bloc-notes Jupyter, directement sous la cellule de code qui l'a produite. Les tracés résultants seront ensuite également stockés dans le document du carnet.


3

Pour l'expliquer clairement:

Si vous ne l'aimez pas comme ça:

entrez la description de l'image ici

ajouter %matplotlib inline

entrez la description de l'image ici

et le voilà dans votre cahier jupyter.


2

TL; DR

%matplotlib inline - Affiche la sortie en ligne


Le noyau IPython a la possibilité d'afficher des tracés en exécutant du code. Le noyau IPython est conçu pour fonctionner de manière transparente avec la bibliothèque de traçage matplotlib pour fournir cette fonctionnalité.

%matplotlibest une commande magique qui effectue la configuration nécessaire en arrière-plan pour qu'IPython fonctionne correctement main dans la main matplotlib; il n'exécute aucune commande d'importation Python, c'est-à-dire qu'aucun nom n'est ajouté à l'espace de noms.

Afficher la sortie dans une fenêtre séparée

%matplotlib

Afficher la sortie en ligne

(disponible uniquement pour le bloc-notes Jupyter et la console Jupyter QtConsole)

%matplotlib inline

Affichage avec backends interactifs

(valeurs valides 'GTK3Agg', 'GTK3Cairo', 'MacOSX', 'nbAgg', 'Qt4Agg', 'Qt4Cairo', 'Qt5Agg', 'Qt5Cairo', 'TkAgg', 'TkCairo', 'WebAgg', 'WX', 'WXAgg', 'WXCairo', 'agg', 'cairo', 'pdf', 'pgf', 'ps', 'svg', 'template')

%matplotlib gtk

Exemple - GTK3Agg - Un rendu Agg sur un canevas GTK 3.x (nécessite PyGObject et pycairo ou cairocffi).

Plus de détails sur les backends interactifs matplotlib: ici


En commençant par IPython 5.0et matplotlib 2.0vous pouvez éviter l'utilisation de la magie spécifique d'IPython et utiliser matplotlib.pyplot.ion()/ matplotlib.pyplot.ioff() qui présente également les avantages de travailler en dehors d'IPython.

Référez-vous: Sortie riche IPython - traçage interactif


Vraie question noob ici, désolé .... qu'est-ce que le "noyau IPython" et qu'est-ce qu'une "commande magique". Python s'est-il soudainement séparé de moi et est-il devenu non pythonique? Je n'ai jamais entendu parler de ces concepts.
lb_so

Pour un cahier python (ipynb) - un ipernal kernal ou jupyter kernal est la version de python (et des dépendances) à utiliser par le projet. Vous pouvez démarrer un cahier jupyter, puis changer les noyaux pour exécuter les cellules avec une configuration différente de python et configurer des variables d'environnement et bien plus encore.
Ani Menon

La commande @Ib_so Magic est une fonctionnalité ipython / jupyter. En savoir plus ici.
Ani Menon

0

À condition que vous exécutiez Jupyter Notebook, la commande% matplotlib inline fera apparaître vos sorties de tracé dans le notebook, elle peut également être stockée.


-8

Il n'est pas obligatoire de l'écrire. Cela a bien fonctionné pour moi sans fonction ( %matplotlib) magique. J'utilise le compilateur Sypder, celui qui est fourni avec Anaconda.


13
Spyder est un IDE, pas un compilateur.
Matthieu Brucher

3
Bien que votre réponse n'ait pas répondu à la question du PO, elle a répondu à la mienne. Je vous remercie.
EngrStudent
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.