Zweck von "% matplotlib inline"

482

Könnte mir jemand erklären, was genau der Nutzen ist %matplotlib inline?

Rishabh
quelle
22
Es ist eine magische Funktion, die die Figur in einem Notizbuch rendert (anstatt einen Speicherauszug des Figurenobjekts anzuzeigen). Ein einfaches Matplotlib-Tutorial finden Sie hier data-blogger.com/2017/11/15/… .
www.data-blogger.com
6
Sie können die verfügbaren Backends (wie inline) überprüfen, indem Sie Folgendes eingeben : %matplotlib --list.
Luis
1
Mögliches Duplikat von Wie man IPython Notebook Matplotlib Plot inline macht
desertnaut

Antworten:

285

%matplotlibist eine magische Funktion in IPython. Ich zitiere hier die relevante Dokumentation, damit Sie sie der Einfachheit halber lesen können:

IPython verfügt über eine Reihe vordefinierter "magischer Funktionen", die Sie mit einer Befehlszeilen-Syntax aufrufen können. Es gibt zwei Arten von Magie: linienorientiert und zellorientiert. Der Zeilenmagie wird das Zeichen% vorangestellt und funktioniert ähnlich wie bei Befehlszeilenaufrufen des Betriebssystems: Sie erhalten als Argument den Rest der Zeile, in der Argumente ohne Klammern oder Anführungszeichen übergeben werden. Linienmagie kann Ergebnisse zurückgeben und auf der rechten Seite einer Aufgabe verwendet werden. Cell Magics wird ein doppeltes %% vorangestellt, und es handelt sich um Funktionen, die als Argument nicht nur den Rest der Zeile, sondern auch die Zeilen darunter in einem separaten Argument erhalten.

%matplotlib inline Setzt das Backend von matplotlib auf das 'Inline'-Backend :

Mit diesem Backend wird die Ausgabe von Plotbefehlen in Frontends wie dem Jupyter-Notizbuch direkt unter der Codezelle, die sie erstellt hat, inline angezeigt. Die resultierenden Diagramme werden dann auch im Notizbuchdokument gespeichert.

Wenn Sie das Inline-Backend verwenden, werden Ihre Matplotlib-Diagramme neben dem Code in Ihr Notizbuch aufgenommen. Es kann sich auch lohnen, zu lesen, wie IPython Notebook Matplotlib Plot inline erstellt wird, um zu erfahren, wie es in Ihrem Code verwendet wird.

Wenn Sie auch Interaktivität wünschen, können Sie das nbagg-Backend mit %matplotlib notebook(in IPython 3.x) verwenden, wie hier beschrieben .

Aurora0001
quelle
4
% matplotlib inline ^ SyntaxError: ungültige Syntax
4
@ Jadda Verwenden Sie IPython? Wenn nicht, wird ein Syntaxfehler angezeigt, da CPython (der Standardinterpreter für Python) nicht gültig ist. Es macht sowieso wenig Sinn, es zu verwenden, es sei denn, Sie verwenden ein IPython-Notizbuch, da der springende Punkt darin besteht, Diagramme inline mit einem Notizbuch zu rendern.
Aurora0001
Ja. Ich verwende dies in Spyder IDE (Teil von Anaconda), um die Tensorflow-Objekterkennungs-API zu implementieren
3
In diesem Fall, @Jadda, scheint es, als hätten Sie eine neue Frage zu stellen. Sie sollten dort alle relevanten Details angeben, damit Sie mehr Aufmerksamkeit für Ihre Frage erhalten als in den Kommentaren dieser Antwort. Viel Glück.
Aurora0001
2
ok, aber was ist die Alternative: Wie kann ich die Handlungen sehen, wenn keine solche Magie aktiviert ist?
JaakL
77

Vorausgesetzt, Sie führen IPython aus, %matplotlib inlinewerden Ihre Plotausgaben angezeigt und im Notizbuch gespeichert.

Laut Dokumentation

Um dies einzurichten, matplotlibmüssen Sie das ausführen , bevor ein Plotten oder Importieren durchgeführt wird %matplotlib magic command. Dadurch wird das notwendige Setup hinter den Kulissen ausgeführt, damit IPython Hand in Hand funktioniert matplotlib. Es werden jedoch keine Python-Importbefehle ausgeführt, dh dem Namespace werden keine Namen hinzugefügt.

Ein besonders interessantes Backend von IPython ist das inlineBackend. Dies ist nur für das Jupyter Notebook und die Jupyter QtConsole verfügbar. Es kann wie folgt aufgerufen werden:

%matplotlib inline

Mit diesem Backend wird die Ausgabe von Plotbefehlen in Frontends wie dem Jupyter-Notizbuch direkt unter der Codezelle, die sie erstellt hat, inline angezeigt. Die resultierenden Diagramme werden dann auch im Notizbuchdokument gespeichert.

Matusko
quelle
32

Wenn Sie Ihrem Jupyter-Notizbuch Diagramme hinzufügen möchten, %matplotlib inlineist dies eine Standardlösung. Und es gibt andere magische Befehle, die matplotlibin Jupyter interaktiv verwendet werden.

%matplotlib: Mit jedem pltPlot-Befehl wird jetzt ein Figurenfenster geöffnet, und es können weitere Befehle ausgeführt werden, um den Plot zu aktualisieren. Einige Änderungen werden nicht automatisch gezeichnet, um ein Update zu erzwingen, verwendenplt.draw()

%matplotlib notebook: führt zu interaktiven Plots, die in das Notizbuch eingebettet sind. Sie können die Figur zoomen und ihre Größe ändern

%matplotlib inline: Zeichnen Sie nur statische Bilder in das Notizbuch

Yossarian42
quelle
7

Ab IPython 5.0 und Matplotlib 2.0 können Sie die Verwendung der spezifischen Magie und Verwendung von IPython vermeiden, die matplotlib.pyplot.ion()/matplotlib.pyplot.ioff()den Vorteil haben, auch außerhalb von IPython zu arbeiten.

ipython docs

Vicki B.
quelle
Ich denke, das ist etwas anderes als das Backend zu ändern. Sofern das Backend nicht aktiviert ist inline, werden Diagramme in äußeren Fenstern generiert, und Sie müssen display () verwenden, um sie im Notizbuch anzuzeigen.
Vincenzooo
4

Wenn Sie nicht wissen, was Backend ist, können Sie dies lesen: https://matplotlib.org/tutorials/introductory/usage.html#backends

Einige Benutzer verwenden matplotlib interaktiv über die Python-Shell und lassen beim Eingeben von Befehlen Plotfenster einblenden. Einige Leute betreiben Jupyter-Notizbücher und zeichnen Inline-Diagramme für eine schnelle Datenanalyse. Andere binden matplotlib in grafische Benutzeroberflächen wie wxpython oder pygtk ein, um umfangreiche Anwendungen zu erstellen. Einige Benutzer verwenden Matplotlib in Batch-Skripten, um Postscript-Bilder aus numerischen Simulationen zu generieren, und andere führen Webanwendungsserver aus, um Diagramme dynamisch bereitzustellen. Um all diese Anwendungsfälle zu unterstützen, kann matplotlib auf verschiedene Ausgaben abzielen. Jede dieser Funktionen wird als Backend bezeichnet. Das "Frontend" ist der benutzerbezogene Code, dh der Plotcode, während das "Backend" die ganze harte Arbeit hinter den Kulissen erledigt, um die Figur zu erstellen.

Wenn Sie also% matplotlib inline eingeben, wird das Inline-Backend aktiviert. Wie in den vorherigen Beiträgen besprochen:

Mit diesem Backend wird die Ausgabe von Plotbefehlen in Frontends wie dem Jupyter-Notizbuch direkt unter der Codezelle, die sie erstellt hat, inline angezeigt. Die resultierenden Diagramme werden dann auch im Notizbuchdokument gespeichert.

Vihang Khare
quelle
4

Es bedeutet nur, dass jedes Diagramm, das wir als Teil unseres Codes erstellen, im selben Notizbuch und nicht in einem separaten Fenster angezeigt wird, was passieren würde, wenn wir diese magische Anweisung nicht verwendet hätten.

Arushi Jain
quelle
3

Um es klar zu erklären:

Wenn es dir nicht so gefällt:

Geben Sie hier die Bildbeschreibung ein

hinzufügen %matplotlib inline

Geben Sie hier die Bildbeschreibung ein

und da hast du es in deinem jupyter notebook.

Prosti
quelle
2

TL; DR

%matplotlib inline - Zeigt die Ausgabe inline an


Der IPython-Kernel kann Diagramme durch Ausführen von Code anzeigen. Der IPython-Kernel arbeitet nahtlos mit der Matplotlib-Plotbibliothek zusammen, um diese Funktionalität bereitzustellen.

%matplotlibist ein magischer Befehl, der das notwendige Setup hinter den Kulissen ausführt, damit IPython Hand in Hand korrekt funktioniert matplotlib. Es werden keine Python-Importbefehle ausgeführt, dh dem Namespace werden keine Namen hinzugefügt.

Ausgabe in separatem Fenster anzeigen

%matplotlib

Ausgabe inline anzeigen

(nur für das Jupyter Notebook und die Jupyter QtConsole verfügbar)

%matplotlib inline

Anzeige mit interaktiven Backends

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

%matplotlib gtk

Beispiel - GTK3Agg - Ein Agg-Rendering auf einer GTK 3.x-Zeichenfläche (erfordert PyGObject und Pycairo oder Cairocffi).

Weitere Details zu den interaktiven Backends von matplotlib: hier


Beginnen Sie mit IPython 5.0und matplotlib 2.0Sie können die Verwendung von IPythons spezifischer Magie vermeiden und matplotlib.pyplot.ion()/ verwenden matplotlib.pyplot.ioff() , die die Vorteile haben, auch außerhalb von IPython zu arbeiten.

Siehe: IPython Rich Output - Interaktives Plotten

Ani Menon
quelle
Echte Noob-Frage hier, sorry ... was ist "IPython-Kernel" und was ist ein "magischer Befehl". Hat sich Python plötzlich von mir getrennt und ist nicht mehr pythonisch geworden? Ich habe noch nie von diesen Konzepten gehört.
lb_so
Für ein Python-Notizbuch (ipynb) - ein ipython kernal oder jupyter kernal ist die Version von Python (und Abhängigkeiten), die vom Projekt verwendet werden soll. Sie können ein Jupyter-Notizbuch starten und dann die Kernale ändern, um die Zellen mit einer anderen Konfiguration von Python auszuführen und Umgebungsvariablen und vieles mehr zu konfigurieren.
Ani Menon vor
Der Befehl @Ib_so Magic ist eine ipython / jupyter-Funktion. Lesen Sie hier mehr.
Ani Menon vor
0

Vorausgesetzt, Sie führen Jupyter Notebook aus, werden mit dem Inline-Befehl% matplotlib Ihre Plotausgaben im Notebook angezeigt und können ebenfalls gespeichert werden.

Ashiq Imran
quelle
-8

Es ist nicht zwingend erforderlich, dies zu schreiben. Es hat gut funktioniert für mich ohne ( %matplotlib) magische Funktion. Ich verwende den Sypder-Compiler, der in Anaconda enthalten ist.

user9196865
quelle
13
Spyder ist eine IDE, kein Compiler.
Matthieu Brucher
3
Während Ihre Antwort die Frage des OP nicht beantwortete, beantwortete sie meine. Vielen Dank.
EngrStudent