Heim >Backend-Entwicklung >Python-Tutorial >Wie erreicht man mit Matplotlib nicht blockierendes Plotten?

Wie erreicht man mit Matplotlib nicht blockierendes Plotten?

Linda Hamilton
Linda HamiltonOriginal
2024-11-02 14:17:30889Durchsuche

How to Achieve Non-Blocking Plotting with Matplotlib?

Fehlerbehebung beim nicht blockierenden Plotten mit Matplotlib

Die blockierende Natur von Matplotlib kann die Echtzeit-Datenvisualisierung behindern. In diesem Artikel werden Lösungen zur Behebung dieses Problems anhand eines Beispiels aus der ursprünglichen Anfrage untersucht.

Das Problem: Qt4Agg-Backend-Probleme

Der ursprüngliche Code verwendete Qt4Agg als Backend, was bekanntermaßen auftritt Einschränkungen bei der nicht blockierenden Ausführung. Die Verwendung von show(block=False) kann zu einem eingefrorenen Fenster führen, da Qt4Agg diese Funktionalität nicht unterstützt.

Die Lösung: Interaktiver Modus und Pause

Um nicht blockierendes Plotten mit Matplotlib zu erreichen, zwei Wichtige Schritte sind von entscheidender Bedeutung:

  1. Aktivieren Sie den interaktiven Modus mit plt.ion(), der es Matplotlib ermöglicht, während Ihres Codes auf GUI-Ereignisse zu reagieren läuft weiter.
  2. Rufen Sie plt.pause(time) auf (z. B. plt.pause(0.001) wie in der bereitgestellten Lösung), um der GUI Zeit zu geben, Ereignisse zu verarbeiten, einschließlich der Neuzeichnung Ihres Plots.

Aktualisierter Code

Hier ist der aktualisierte Code, der diese enthält Lösungen:

<code class="python">import numpy as np
from matplotlib import pyplot as plt

def main():
    plt.axis([-50,50,0,10000])
    plt.ion()
    plt.show()

    x = np.arange(-50, 51)
    for pow in range(1,5):   # plot x^1, x^2, ..., x^4
        y = [Xi**pow for Xi in x]
        plt.plot(x, y)
        plt.draw()
        plt.pause(0.001)
        input("Press [enter] to continue.")

if __name__ == '__main__':
    main()</code>

Mit diesem Code können Sie den vorhandenen Plot auf nicht blockierende Weise aktualisieren und so ein nahtloses und reaktionsfähiges Visualisierungserlebnis bieten.

Das obige ist der detaillierte Inhalt vonWie erreicht man mit Matplotlib nicht blockierendes Plotten?. 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