Come ottengo nuovamente i grafici interattivi in ​​Spyder / IPython / matplotlib?


91

Ho aggiornato da Python (x, y) 2.7.2.3 a 2.7.6.0 in Windows 7 (ed ero felice di vedere che finalmente posso digitare function_name?e vedere di nuovo la docstring nell'Object Inspector) ma ora il plottaggio non funziona così abituato a.

In precedenza (Spyder 2.1.9, IPython 0.10.2, matplotlib 1.2.1), quando tracciavo questo script , ad esempio, tracciava le sottotrame fianco a fianco in una finestra interattiva:

inserisci qui la descrizione dell'immagine

Ora (Spyder 2.2.5, IPython 1.2.0, Matplotlib 1.3.1) quando provo a tracciare le cose, fa le sottotrame come piccoli PNG in linea, che è un cambiamento in IPython :

piccoli PNG in linea

Quindi sono entrato nelle opzioni e ho trovato questo:

opzioni grafiche

il che sembra dire che posso recuperare le vecchie trame interattive, con le 4 sottotrame visualizzate fianco a fianco, ma quando passo ad "Automatico" e provo a tracciare qualcosa, non fa nulla. Nessun complotto.

Se cambio questo menu a discesa su Qt, o deseleziono "Attiva supporto", traccia solo la prima sottotrama, o parte di essa, e poi si ferma:

inserisci qui la descrizione dell'immagine

Come ottengo il vecchio comportamento di 4 sottotrame affiancate in un'unica figura con cui posso interagire?


Penso che questo dovrebbe andare come una segnalazione di bug per pythonxy. La mia ingenua ipotesi è che stiano usando pyplot per gestire tutto ciò che traccia e vengono morsi nel sedere per questo (il che sembra sbagliato, perché hanno il loro widget qt).
tacaswell

1
@tcaswell Chi sono "loro" e cosa userebbero al posto di pyplot?
endolith

1
Puoi riprodurre questo problema al di fuori di pythonxy (usando semplicemente ipython + qtconsole)? Non ci sono abbastanza informazioni qui per capire cosa non va.
tacaswell

1
Suppongo che sia un bug in Spyder (Spyder è l'IDE, pythonxy è la distribuzione).
Thomas K

1
@tcaswell: Aha. Sembra che il mio script stia producendo errori matplotlib che vengono quindi inviati da qualche parte diversa dalla console IPython. Vengono visualizzati se utilizzo invece la console Qt, e ora che lo cerco, vengono visualizzati nella normale scheda Console di Spyder. Se creo uno script più semplice, funziona, sia a stati macchina che orientato agli oggetti. Ho pensato di dover modificare alcune impostazioni IPython a causa dei nuovi grafici in linea.
endolith

Risposte:


134

Cambia il backend in automatico:

Strumenti> preferenze> console IPython> Grafica> Backend grafica> Backend: automatico

Quindi chiudere e aprire Spyder.


27
La chiusura e l'apertura è infatti necessaria. Mi chiedo solo perché questo non è il valore predefinito.
Mathias 711

5
Inoltre, per chiunque ancora non veda le proprie trame (come non lo ero io), la finestra della trama potrebbe apparire silenziosamente_dietro_ la finestra della tua console (almeno lo fa in Spyder su Windows 10), quindi potresti dover cercare la tua finestra.
Joshua Glazer

3
Per coloro che hanno difficoltà a trovarlo, si trova apython > preferences > IPython console > Graphics > Graphics backend > Backend: Automatic
cameronroytaylor

6
Invece di riavviare Spyder, puoi anche riavviare il kernel (facendo clic sulla rotella delle impostazioni nella console e quindi su "Riavvia kernel" o tramite una scorciatoia da tastiera (su Mac Cmd +.)
Michael

Non ho idea del perché, ma il passaggio ad Automatico, il riavvio di Spyder, quindi il passaggio a Inline hanno causato l'avvio della visualizzazione dei grafici in linea ogni volta che emetto un comando di input in un ciclo. Questo è molto utile!
Josiah Yoder

50

Puoi controllarlo rapidamente digitando i comandi magici incorporati nella console IPython di Spyder, che trovo più veloce rispetto a selezionarli dal menu delle preferenze. Le modifiche hanno effetto immediato, senza dover riavviare Spyder o il kernel.

Per passare ai grafici "automatici" (ovvero interattivi), digita:

%matplotlib auto

quindi, se vuoi tornare a "inline", digita questo:

%matplotlib inline

(Nota: questi comandi non funzionano su console non IPython)

Ulteriori informazioni su questo argomento: Scopo di "% matplotlib inline"


In Python 3.6, ottengomatplotlib inline File "<stdin>", line 1 %matplotlib inline ^ SyntaxError: invalid syntax
Karlo

2
@Karlo quell'errore è previsto da un interprete "python" convenzionale. Questa sintassi è valida solo con ipython o Spyder.
Mike T

OK, lo stavo usando in Spyder ma nella console Python. In effetti, funziona nella console IPython.
Karlo

3
C'è un modo per impostarlo utilizzando uno script? Vale a dire per scegliere dov'è l'output del grafico all'interno di uno script? Grazie.
Royi

1
Questo sembra non funzionare in Spyder, anche se è il modo per farlo in una normale finestra IPython. L'utilizzo delle preferenze del menu ha funzionato per me; non sono sicuro del motivo per cui non lo fa.
tartarughe sono carine

10

Dopo l'applicazione: Strumenti> preferenze> Grafica> Backend> Automatico Riavvia semplicemente il kernel inserisci qui la descrizione dell'immagine

E otterrai sicuramente un grafico interattivo. Buona programmazione!


5

Come detto nei commenti, il problema sta nel tuo copione. In realtà, ci sono 2 problemi:

  • C'è un errore matplotlib, immagino che tu stia passando un argomento come Noneda qualche parte. Forse a causa del default?
  • Chiami show()dopo ogni sottotrama. show()dovrebbe essere chiamato una volta alla fine del tuo script. L'alternativa è usare la modalità interattiva, cerca ionnella documentazione di matplotlib.

2

Questo è in realtà abbastanza facile da risolvere e non richiede alcuna codifica:

1.Fare clic sulla scheda Plots sopra la console. 2.Quindi nell'angolo in alto a destra della schermata dei grafici, fare clic sul pulsante delle opzioni. 3. Infine deseleziona il pulsante "Disattiva stampa in linea"

Ora riesegui lo script ei tuoi grafici dovrebbero essere visualizzati nella console.

Saluti.

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.