2012-07-13 25 views
7

Sto riscontrando alcuni problemi con matplotlib .... Non riesco ad aprire 2 finestre contemporaneamente per visualizzare un'immagine con show(), sembra che lo script si fermi al line uso show e non continua a meno che non chiuda manualmente il display. C'è un modo per chiudere la finestra delle figure all'interno della scrittura?utilizzando show() e close() da matplotlib

il seguente codice non funziona come voglio:

import matplotlib.pyplot as plt 
from time import sleep 
from scipy import eye 

plt.imshow(eye(3)) 
plt.show() 
sleep(1) 
plt.close() 
plt.imshow(eye(2)) 
plt.show() 

mi aspettavo la prima finestra per chiudere dopo 1 secondo e poi aprire il secondo, ma la finestra non si chiude fino a che non chiudo me stessa. Sto facendo qualcosa di sbagliato, o è come dovrebbe essere?

+0

Possibile duplicato. Controlla http://stackoverflow.com/q/9753885/302369 – imsc

+0

che risolve questo problema, ma ne ottengo un altro ..... quando uso plt.ion() non posso usare alcune risorse come lo zoom nella figura finestra (non riesco nemmeno a spostare la finestra) ... – xarles

risposta

11

plt.show() è un che blocca la funzione.

In sostanza, se si desidera aprire due finestre contemporaneamente, è necessario creare due figure, quindi utilizzare il comando plt.show() alla fine per visualizzarle. In effetti, una regola generale è che tu prepari i tuoi grafici, e plt.show() è l'ultima cosa che fai.

Quindi nel tuo caso:

fig1 = plt.figure(figsize=plt.figaspect(0.75)) 
ax1 = fig1.add_subplot(1, 1, 1) 
im1, = plt.imshow(eye(3)) 

fig2 = plt.figure(figsize=plt.figaspect(0.75)) 
ax2 = fig2.add_subplot(1, 1, 1) 
im2, = plt.imshow(eye(2)) 

plt.show() 

È possibile passare tra le trame utilizzando axes(ax2).

Ho creato un esempio esaustivo che dimostra il motivo per cui la funzione di stampa si sta bloccando e come può essere utilizzata in una risposta a un'altra domanda: https://stackoverflow.com/a/11141305/1427975.

+0

grazie, signore. Ma nella mia sceneggiatura, sto cercando di dimostrare come 100 trame uno per uno. Probabilmente non sceglierei di plt.show() tutto alla fine. Voglio mostrare un grafico, mettere in pausa per forse 1 secondo, quindi chiuderlo automaticamente negli script invece di chiuderlo manualmente, quindi mostrare ripetutamente il prossimo, per 100 volte. C'è comunque qualcosa da fare? Modifica: ho provato il plt.ion() sopra tutto. Sì, i grafici appaiono e vengono chiusi uno per uno. Tuttavia, nulla appare nella finestra della figura, tutto bianco. – StayFoolish

1

Io uso PyScripter e Python 2.7 e ho anche avuto il problema di plt.show() bloccare tutte le esecuzioni finché non si chiudono manualmente le cifre.

Ho scoperto che la modifica del motore Python su "remoto (Wx)" consente di eseguire lo script dopo plt.show(), quindi è possibile chiudere le cifre con plt.close().