Scopo di "% matplotlib inline"


483

Qualcuno potrebbe spiegarmi a cosa serve esattamente %matplotlib inline?


22
È una funzione magica che esegue il rendering della figura in un blocco note (anziché visualizzare un dump dell'oggetto figura). Un semplice tutorial su Matplotlib è disponibile qui data-blogger.com/2017/11/15/… .
www.data-blogger.com

7
È possibile controllare i backend disponibili (come inline) immettendo: %matplotlib --list.
Luis

Risposte:


286

%matplotlibè una funzione magica in IPython. Citerò qui la documentazione pertinente da leggere per comodità:

IPython ha una serie di "funzioni magiche" predefinite che è possibile chiamare con una sintassi in stile riga di comando. Esistono due tipi di magie, orientate alla linea e orientate alla cellula. Le magie di linea sono precedute dal carattere% e funzionano in modo molto simile alle chiamate da riga di comando del sistema operativo: ottengono come argomento il resto della linea, dove gli argomenti vengono passati senza parentesi o virgolette. Le linee magiche possono restituire risultati e possono essere utilizzate nella parte destra di un compito. Le magie cellulari sono precedute da un doppio %% e sono funzioni che ottengono come argomento non solo il resto della linea, ma anche le linee sottostanti in un argomento separato.

%matplotlib inline imposta il backend di matplotlib sul backend 'inline' :

Con questo backend, l'output dei comandi di stampa viene visualizzato in linea all'interno di frontend come il notebook Jupyter, direttamente sotto la cella di codice che lo ha prodotto. I grafici risultanti verranno quindi memorizzati anche nel documento del notebook.

Quando si utilizza il backend "inline", i grafici matplotlib verranno inclusi nel notebook, accanto al codice. Potrebbe valere la pena leggere anche Come rendere in linea il diagramma matplotlib per notebook IPython come riferimento su come usarlo nel codice.

Se si desidera anche l'interattività, è possibile utilizzare il back-end nbagg con %matplotlib notebook(in IPython 3.x), come descritto qui .


4
% matplotlib inline ^ SintassiError: sintassi non valida

4
@Jadda Stai usando IPython? In caso contrario, verrà visualizzato un errore di sintassi, in quanto non è CPython valido (l'interprete "standard" per Python). Inutile utilizzarlo comunque, a meno che non si stia utilizzando un Notebook IPython, poiché l'intero punto è rendere i grafici in linea con un notebook.
Aurora0001,

Sì. Lo sto usando nell'IDE Spyder (parte di Anaconda) per implementare l'API di rilevamento oggetti

3
In tal caso, @Jadda, sembra che tu abbia una nuova domanda da porre. Dovresti includere tutti i dettagli rilevanti lì in modo da poter ottenere più attenzione per la tua domanda che nei commenti di questa risposta. In bocca al lupo.
Aurora0001,

2
ok, ma qual è l'alternativa: come posso vedere le trame se non c'è tale magia attivata?
JaakL

77

A condizione che si stia eseguendo IPython, i %matplotlib inlinerisultati della trama verranno visualizzati e memorizzati nel notebook.

Secondo la documentazione

Per configurarlo, prima di matplotlibeseguire qualsiasi tracciamento o importazione di è necessario eseguire il %matplotlib magic command. Ciò esegue la configurazione dietro le quinte necessaria affinché IPython funzioni correttamente mano nella mano matplotlib; tuttavia, non esegue effettivamente alcun comando di importazione Python, ovvero non viene aggiunto alcun nome allo spazio dei nomi.

Un backend particolarmente interessante, fornito da IPython, è il inlinebackend. Questo è disponibile solo per Jupyter Notebook e Jupyter QtConsole. Può essere invocato come segue:

%matplotlib inline

Con questo backend, l'output dei comandi di stampa viene visualizzato in linea all'interno di frontend come il notebook Jupyter, direttamente sotto la cella di codice che lo ha prodotto. I grafici risultanti verranno quindi memorizzati anche nel documento del notebook.


32

Se vuoi aggiungere grafici al tuo notebook Jupyter, allora %matplotlib inlineè una soluzione standard. E ci sono altri comandi magici che verranno utilizzati in modo matplotlibinterattivo all'interno di Jupyter.

%matplotlib: qualsiasi pltcomando di trama ora aprirà una finestra di figura e ulteriori comandi potranno essere eseguiti per aggiornare il diagramma. Alcune modifiche non verranno disegnate automaticamente, per forzare un aggiornamento, utilizzareplt.draw()

%matplotlib notebook: porterà a grafici interattivi incorporati nel notebook, è possibile ingrandire e ridimensionare la figura

%matplotlib inline: disegna solo immagini statiche nel notebook


7

A partire da IPython 5.0 e matplotlib 2.0 è possibile evitare l'uso della magia e dell'uso specifici di IPython matplotlib.pyplot.ion()/matplotlib.pyplot.ioff()che presentano i vantaggi di lavorare anche al di fuori di IPython.

documenti ipython


Penso che sia diverso dal cambiare il backend. A meno che non lo sia il backend inline, i grafici vengono generati nelle finestre esterne ed è necessario utilizzare display () per mostrarli nel notebook.
Vincenzooo,

5

Significa solo che qualsiasi grafico che stiamo creando come parte del nostro codice apparirà nello stesso taccuino e non in una finestra separata, cosa che accadrebbe se non avessimo usato questa dichiarazione magica.


4

Se non sai cos'è il backend, puoi leggere questo: https://matplotlib.org/tutorials/introductory/usage.html#backends

Alcune persone usano matplotlib in modo interattivo dalla shell python e fanno apparire finestre di tracciamento quando digitano i comandi. Alcune persone eseguono notebook Jupyter e disegnano grafici in linea per una rapida analisi dei dati. Altri incorporano matplotlib in interfacce utente grafiche come wxpython o pygtk per creare applicazioni ricche. Alcune persone usano matplotlib negli script batch per generare immagini PostScript da simulazioni numeriche, mentre altri ancora eseguono server di applicazioni Web per servire in modo dinamico grafici. Per supportare tutti questi casi d'uso, matplotlib può indirizzare output diversi e ciascuna di queste funzionalità è chiamata backend; il "frontend" è il codice utente, cioè il codice di stampa, mentre il "backend" fa tutto il duro lavoro dietro le quinte per fare la figura.

Pertanto, quando si digita% matplotlib inline, si attiva il back-end inline. Come discusso nei post precedenti:

Con questo backend, l'output dei comandi di stampa viene visualizzato in linea all'interno di frontend come il notebook Jupyter, direttamente sotto la cella di codice che lo ha prodotto. I grafici risultanti verranno quindi memorizzati anche nel documento del notebook.


3

Per spiegarlo chiaramente:

Se non ti piace così:

inserisci qui la descrizione dell'immagine

Inserisci %matplotlib inline

inserisci qui la descrizione dell'immagine

e il gioco è fatto nel tuo quaderno jupyter.


2

TL; DR

%matplotlib inline - Visualizza l'output in linea


Il kernel IPython ha la capacità di visualizzare grafici eseguendo il codice. Il kernel IPython è progettato per funzionare perfettamente con la libreria di stampa matplotlib per fornire questa funzionalità.

%matplotlibè un comando magico che esegue la configurazione dietro le quinte necessaria affinché IPython funzioni correttamente mano nella mano matplotlib; non esegue alcun comando di importazione Python, ovvero non viene aggiunto alcun nome allo spazio dei nomi.

Visualizza l'output in una finestra separata

%matplotlib

Visualizza l'output in linea

(disponibile solo per Jupyter Notebook e Jupyter QtConsole)

%matplotlib inline

Display con backend interattivi

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

%matplotlib gtk

Esempio: GTK3Agg: rendering Agg su una tela GTK 3.x (richiede PyGObject e pycairo o cairocffi).

Maggiori dettagli sui backend interattivi matplotlib: qui


A partire da IPython 5.0e matplotlib 2.0puoi evitare l'uso della magia specifica di IPython e l'uso matplotlib.pyplot.ion()/ matplotlib.pyplot.ioff() che hanno i vantaggi di lavorare anche al di fuori di IPython.

Consultare: Output ricco di IPython - Plot interattivo


Qui c'è una vera domanda noob, scusate .... cos'è "kernel IPython" e cos'è un "comando magico". Python si è improvvisamente separato da me e non è diventato pitonico? Non ho mai sentito parlare di questi concetti.
lb_so

Per un notebook python (ipynb) - un ipython kernal o jupyter kernal è la versione di python (e dipendenze) che verrà utilizzata dal progetto. Puoi avviare un notebook jupyter e quindi cambiare i kernals per eseguire le celle con una diversa configurazione di Python e configurare le variabili di ambiente e molto altro.
Ani Menon

@Ib_so Il comando Magic è una funzione ipython / jupyter. Leggi di più qui.
Ani Menon

0

A condizione che tu stia eseguendo Jupyter Notebook, il comando inline% matplotlib farà apparire gli output della trama nel notebook, inoltre può essere memorizzato.


-8

Non è obbligatorio scriverlo. Ha funzionato bene per me senza ( %matplotlib) funzione magica. Sto usando il compilatore Sypder, uno che viene fornito in Anaconda.


13
Spyder è un IDE, non un compilatore.
Matthieu Brucher,

3
Sebbene la tua risposta non abbia risposto alla domanda del PO, ha risposto alla mia. Grazie.
EngrStudent,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.