Figure interattive #

Quando si lavora con i dati, l'interattività può essere preziosa. Gli strumenti di panoramica/zoom e posizione del mouse incorporati nelle finestre della GUI di Matplotlib sono spesso sufficienti, ma puoi anche utilizzare il sistema di eventi per creare strumenti di esplorazione dei dati personalizzati.

Matplotlib viene fornito con collegamenti back -end a diversi toolkit GUI (Qt, Tk, Wx, GTK, macOS, JavaScript) e pacchetti di terze parti forniscono collegamenti a kivy e Jupyter Lab . Affinché le figure rispondano agli eventi del mouse, della tastiera e del disegno, il ciclo di eventi della GUI deve essere integrato con un prompt interattivo. Si consiglia di utilizzare IPython (vedere di seguito ).

Il pyplotmodulo fornisce funzioni per la creazione esplicita di figure che includono strumenti interattivi, una barra degli strumenti, un tooltip e combinazioni di tasti :

pyplot.figure

Crea un nuovo vuoto Figureo seleziona una figura esistente

pyplot.subplots

Crea un nuovo Figuree lo riempie con una griglia diAxes

pyplotha una nozione di "The Current Figure" a cui si può accedere tramite pyplot.gcfe una nozione di "The Current Axes" a cui si accede tramite pyplot.gca. Quasi tutte le funzioni pyplotpassano attraverso l'attuale Figure/ Axes(o ne creano una) a seconda dei casi.

Matplotlib mantiene un riferimento a tutte le figure aperte create tramite pyplot.figureo pyplot.subplotsin modo che le figure non vengano raccolte in modo indesiderato. Figures può essere chiuso e cancellato da pyplotindividualmente tramite pyplot.close; tutti i messaggi aperti Figurepossono essere chiusi tramite plt.close('all').

Per ulteriori discussioni sul sistema di eventi di Matplotlib e sui cicli di eventi integrati, leggere:

Integrazione IPython #

Si consiglia di utilizzare IPython per una shell interattiva. Oltre a tutte le sue funzionalità (miglioramento del completamento delle schede, magie, modifica multilinea, ecc.), assicura anche che il ciclo di eventi del toolkit della GUI sia correttamente integrato con la riga di comando (vedere Integrazione del prompt dei comandi ).

In questo esempio, creiamo e modifichiamo una figura tramite un prompt di IPython. La figura viene visualizzata in una finestra GUI QtAgg. Per configurare l'integrazione e abilitare la modalità interattiva usa la %matplotlibmagia:

In [1]: %matplotlib
Using matplotlib backend: QtAgg

In [2]: import matplotlib.pyplot as plt

Crea una nuova finestra figura:

In [3]: fig, ax = plt.subplots()

Aggiungi un grafico a linee dei dati alla finestra:

In [4]: ln, = ax.plot(range(5))

Cambia il colore della linea da blu ad arancione:

In [5]: ln.set_color('orange')

Se desideri disabilitare il ridisegno automatico del grafico:

In [6]: plt.ioff()

Se desideri riattivare il ridisegno automatico del grafico:

In [7]: plt.ion()

Nelle versioni recenti di Matplotlibe IPython, è sufficiente importare matplotlib.pyplote chiamare pyplot.ion. L'uso della %magia è garantito per funzionare in tutte le versioni di Matplotlib e IPython.

Modalità interattiva #

pyplot.ion

Attiva la modalità interattiva.

pyplot.ioff

Disabilita la modalità interattiva.

pyplot.isinteractive

Restituisce se i grafici vengono aggiornati dopo ogni comando di tracciamento.

pyplot.show

Visualizza tutte le figure aperte.

pyplot.pause

Esegui il ciclo di eventi della GUI per secondi di intervallo .

Controlli della modalità interattiva:

  • se le figure create vengono visualizzate automaticamente

  • se le modifiche agli artisti attivano automaticamente il ridisegno delle figure esistenti

  • when pyplot.show()restituisce se non vengono forniti argomenti: immediatamente o dopo che tutte le figure sono state chiuse

Se in modalità interattiva:

  • le figure appena create verranno visualizzate immediatamente

  • le figure verranno ridisegnate automaticamente quando gli elementi vengono modificati

  • pyplot.show()visualizza le cifre e ritorna immediatamente

Se non in modalità interattiva:

Se sei in modalità non interattiva (o hai creato figure mentre sei in modalità non interattiva) potresti dover chiamare esplicitamente pyplot.show per visualizzare le finestre sullo schermo. Se desideri eseguire il ciclo di eventi della GUI solo per un periodo di tempo fisso, puoi utilizzare pyplot.pause. Ciò bloccherà l'avanzamento del codice come se avessi chiamato time.sleep, assicurerà che la finestra corrente venga mostrata e ridisegnata se necessario ed eseguirà il ciclo di eventi della GUI per il periodo di tempo specificato.

Il ciclo di eventi della GUI integrato con il prompt dei comandi e le figure in modalità interattiva sono indipendenti l'una dall'altra. Se utilizzi pyplot.ionma non hai organizzato l'integrazione del ciclo di eventi, le tue figure appariranno ma non saranno interattive mentre il prompt è in attesa di input. Non sarai in grado di eseguire pan/zoom e la figura potrebbe non essere nemmeno renderizzata (la finestra potrebbe apparire nera, trasparente o come un'istantanea del desktop sotto di essa). Al contrario, se si configura l'integrazione del ciclo di eventi, le cifre visualizzate saranno reattive durante l'attesa dell'input al prompt, indipendentemente dalla "modalità interattiva" di pyplot.

Indipendentemente dalla combinazione di impostazione della modalità interattiva e integrazione del ciclo di eventi, le cifre saranno reattive se si utilizza pyplot.show(block=True), pyplot.pauseo si esegue il ciclo principale della GUI in qualche altro modo.

Avvertimento

Utilizzando Figure.showè possibile visualizzare una figura sullo schermo senza avviare il ciclo di eventi e senza essere in modalità interattiva. Questo potrebbe funzionare (a seconda del toolkit della GUI) ma probabilmente si tradurrà in una cifra non reattiva.

Interfaccia utente predefinita #

Le finestre create da pyplothanno una barra degli strumenti interattiva con pulsanti di navigazione e una lettura dei valori dei dati su cui punta il cursore. Per impostazione predefinita, vengono registrate numerose combinazioni di tasti utili.

Altri prompt di Python #

La modalità interattiva funziona nel prompt predefinito di Python:

>>> import matplotlib.pyplot as plt
>>> plt.ion()
>>>

tuttavia ciò non garantisce che l'hook dell'evento sia installato correttamente e le tue cifre potrebbero non rispondere. Si prega di consultare la documentazione del proprio toolkit GUI per i dettagli.

Jupyter Notebook / JupyterLab #

Nota

Per ottenere la funzionalità interattiva qui descritta, devi utilizzare un backend interattivo. Il backend predefinito nei notebook, il backend inline, non lo è. backend_inline esegue il rendering della figura una volta e inserisce un'immagine statica nel notebook quando viene eseguita la cella. Poiché le immagini sono statiche, non possono essere spostate/ingrandite, accettare l'input dell'utente o essere aggiornate da altre celle.

Per ottenere figure interattive nel notebook "classico" o nel laboratorio Jupyter, utilizzare il backend ipympl (deve essere installato separatamente) che utilizza il framework ipywidget . Se ipymplè installato usa la magia:

%matplotlib widget

per selezionarlo e attivarlo.

Se hai solo bisogno di usare il taccuino classico, puoi usare

%matplotlib notebook

che utilizza il backend_nbaggbackend fornito da Matplotlib; tuttavia, nbagg non funziona in Jupyter Lab.

GUI + Jupyter #

Puoi anche utilizzare uno dei ipymplbackend non GUI in un Jupyter Notebook. Se stai eseguendo il tuo kernel Jupyter in locale, la finestra della GUI verrà visualizzata sul desktop adiacente al tuo browser web. Se esegui il tuo notebook su un server remoto, il kernel proverà ad aprire la finestra della GUI sul computer remoto. A meno che tu non abbia provveduto a reindirizzare l'xserver sul tuo desktop, non sarai in grado di vedere o interagire con la finestra. Può anche sollevare un'eccezione.

PyCharm, Spyder e VSCode #

Molti IDE hanno un'integrazione integrata con Matplotlib, consultare la loro documentazione per i dettagli di configurazione.