Heim  >  Artikel  >  Backend-Entwicklung  >  So plotten Sie mit Matplotlib nicht blockierend: Warum funktioniert „show(block=False)“ nicht immer?

So plotten Sie mit Matplotlib nicht blockierend: Warum funktioniert „show(block=False)“ nicht immer?

Barbara Streisand
Barbara StreisandOriginal
2024-11-03 04:02:02391Durchsuche

How to Plot in a Non-Blocking Way with Matplotlib: Why Does `show(block=False)` Not Always Work?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn