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 pyplot
modulo 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
Figure
o seleziona una figura esistentepyplot.subplots
pyplot
ha una nozione di "The Current Figure" a cui si può accedere tramite pyplot.gcf
e una nozione di "The Current Axes" a cui si accede tramite pyplot.gca
. Quasi tutte le funzioni pyplot
passano 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.figure
o pyplot.subplots
in modo che le figure non vengano raccolte in modo indesiderato. Figure
s può essere chiuso e cancellato da pyplot
individualmente tramite
pyplot.close
; tutti i messaggi aperti Figure
possono 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
%matplotlib
magia:
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 Matplotlib
e IPython
, è sufficiente importare matplotlib.pyplot
e chiamare pyplot.ion
. L'uso della %
magia è garantito per funzionare in tutte le versioni di Matplotlib e IPython.
Modalità interattiva #
Attiva la modalità interattiva. |
|
Disabilita la modalità interattiva. |
|
Restituisce se i grafici vengono aggiornati dopo ogni comando di tracciamento. |
Visualizza tutte le figure aperte. |
|
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:
le figure appena create e le modifiche alle figure non vengono visualizzate fino a quando
pyplot.show()
è chiamatopyplot.pause()
è chiamatoFigureCanvasBase.flush_events()
è chiamato
pyplot.show()
esegue il ciclo di eventi della GUI e non ritorna fino a quando tutte le finestre del grafico non sono chiuse
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.ion
ma 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.pause
o 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 pyplot
hanno 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_nbagg
backend fornito da Matplotlib; tuttavia, nbagg non funziona in Jupyter Lab.
GUI + Jupyter #
Puoi anche utilizzare uno dei ipympl
backend 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.