Heim > Artikel > Backend-Entwicklung > So plotten Sie mit Matplotlib nicht blockierend: Warum funktioniert „show(block=False)“ nicht immer?
Blockierungsfreies Plotten mit Matplotlib: Beheben von Ausführungsproblemen
Wenn Sie versuchen, eine Funktion mit Matplotlib zu plotten, ohne die Ausführung anzuhalten, werden Sie Möglicherweise stoßen Sie auf Schwierigkeiten im Zusammenhang mit der GUI und den Backend-Interaktionen. Ein häufiges Missverständnis ist die Verwendung von show(block=False), die je nach Backend möglicherweise nicht immer funktioniert.
Ihr bereitgestellter Code demonstriert die Verwendung von show(block=False), aber es scheint, dass Sie es sind plt.ion() nicht vor dem Aufruf von show() verwenden. plt.ion() aktiviert den interaktiven Modus und ermöglicht ein nicht blockierendes Plotten, bei dem Sie zeichnen und Aktualisierungen anhalten können.
Wenn plt.ion() aktiviert ist, können Sie plt.show() aufrufen, um das Plotfenster anzuzeigen . Dieses Fenster bleibt geöffnet und blockiert nicht, sodass Sie mit der Ausführung fortfahren können. Um jedoch die aktualisierten Diagramme anzuzeigen, müssen Sie plt.draw() verwenden, um die Leinwand neu zu zeichnen, und plt.pause(timeout), um die Ausführung für einen kurzen Zeitraum anzuhalten. Der Timeout-Parameter in plt.pause() bestimmt die Länge der Pause in Sekunden.
In Ihrem speziellen Fall ist es außerdem wichtig zu beachten, dass jedes Mal, wenn Sie plt.plot() aufrufen, ein neuer Plot erstellt wird im selben Fenster erstellt werden. Wenn Sie stattdessen den vorhandenen Plot aktualisieren möchten, sollten Sie plt.plot(x, y, color='r') verwenden. Dadurch werden die neuen Datenpunkte in roter Farbe dargestellt, während das vorhandene Diagramm erhalten bleibt.
Unten finden Sie eine überarbeitete Version Ihres Codes, die das Problem der Nichtblockierung beheben und das vorhandene Diagramm aktualisieren sollte:
<code class="python">import matplotlib.pyplot as plt import numpy as np def main(): plt.ion() # Activate interactive mode plt.show() # Display the plot window plt.axis([-50,50,0,10000]) x = np.arange(-50, 51) for pow in range(1,5): y = [Xi**pow for Xi in x] plt.plot(x, y, color='r') # Update the plot in red color plt.draw() plt.pause(0.001) # Pause for a brief period input("Press [enter] to continue.") if __name__ == '__main__': main()</code>
Das obige ist der detaillierte Inhalt vonSo plotten Sie mit Matplotlib nicht blockierend: Warum funktioniert „show(block=False)“ nicht immer?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!