2017-05-30 2 views
1

Ich kämpfe mit pyplot aus der matlpotlib-Bibliothek. Die Figur friert schon, wenn ich versuche, das Grundstück zu erstellen:pyplot plot friert ein (antwortet nicht)

plt.figure() 
plt.ion() 
ax1 = plt.subplot(211) #Here it freezes 
plt.title('test', fontsize=8) 
plt.xlim(-1700, 1700) 
plt.ylabel('x-axis') 
plt.xlabel('y-axis') 
plt.grid() 
plt.show() 
...do something else 

Ich habe nur mit pyqt Plots gearbeitet, aber dieses Mal Ich mag würde mein Problem zu lösen, ohne Multithreading da ist mir egal, wenn die Handlung meinen Code stoppt für einen kurzen Moment. Das Problem ist, das Skript stoppt nicht, sondern läuft weiter und wartet nicht, bis die Figur vollständig erstellt ist. (time.sleep() hilft nicht). Gibt es eine Lösung ohne Threads?

Cheers, James

Ps .: Wenn ich einen Haltepunkt nach dem Code, und führen Sie im Debug-Modus hinzufügen, ist es kein Problem (offensichtlich).

+0

Wie (wo) führen Sie das? Es ist offensichtlich schwierig, das so zu reproduzieren, als ob ein Skript gut funktioniert (in dem Sinne, dass ein Plot erstellt wird, sofort geschlossen wird und "... etwas anderes tut" ausgeführt wird). Das Hinzufügen weiterer Details wie Versionen, Backend, genaue Ausführungsprozedur (oder IDE, von der es ausgeführt wird) ist erforderlich. – ImportanceOfBeingErnest

+0

Also ich benutze Pycharm 2016.2.3 mit Python 2.7 und ich weiß ehrlich nicht, was mit Backend gemeint ist. Um mein Problem zu betonen: Wenn ich "do sth else" zu time.sleep (5) ändere, erscheint das Diagramm nach 5 Sekunden. Das gleiche passiert mit meinem Code: Die folgende Messschleife blockiert den Hauptfaden und daher kann pyplot den Plot nicht vervollständigen. Ich suche nach einer Art Rückmeldung der Handlung, so dass das Skript erst fortgesetzt wird, wenn die Handlung erstellt wurde. –

Antwort

0

Funktioniert das wie Sie wollen?

import matplotlib.pyplot as plt 

plt.figure() 
plt.ion() 
ax1 = plt.subplot(211) #Here it freezes 
plt.title('test', fontsize=8) 
plt.xlim(-1700, 1700) 
plt.ylabel('x-axis') 
plt.xlabel('y-axis') 
plt.grid() 
plt.draw() # draw the plot 
plt.pause(5) # show it for 5 seconds 
print("Hallo") # continue doing other stuff 
+0

Ja, das tut es; Wenn ich time.sleep (5) danach hinzufüge, wird der Plot vor dem Timeout abgeschlossen. Aber ich denke, wenn ich die Handlung durch meinen ganzen Code behalten möchte, sollte ich zu Multithreading wechseln ... Ansonsten stürzt es immer ab, wenn ich versehentlich darauf klicke. –

0

Verwenden von plt.clf ist ein einfaches Addon zum Schließen der Figur, nachdem das Diagramm abgeschlossen ist.

import matplotlib.pyplot as plt 

plt.figure() 
plt.ion() 
ax1 = plt.subplot(211) 
plt.title('test', fontsize=8) 
plt.xlim(-1700, 1700) 
plt.ylabel('x-axis') 
plt.xlabel('y-axis') 
plt.grid() 
plt.show() 
plt.clf() # Here is another path