Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich Matplotlib-Plots in einer Tkinter-Anwendung effizient aktualisieren, nachdem ich die Zeitskala geändert habe?

Wie kann ich Matplotlib-Plots in einer Tkinter-Anwendung effizient aktualisieren, nachdem ich die Zeitskala geändert habe?

Mary-Kate Olsen
Freigeben: 2024-12-09 07:10:08
Original
212 Leute haben es durchsucht

How Can I Efficiently Update Matplotlib Plots in a Tkinter Application After Changing the Time Scale?

Plots in Matplotlib für Tkinter aktualisieren

Sie sind auf Schwierigkeiten beim Aktualisieren von Plots in Matplotlib innerhalb einer Tkinter-Anwendung gestoßen. Sie ermöglichen Benutzern, die Zeitskaleneinheiten anzupassen, was eine Neuberechnung und Aktualisierung des Plots erfordert, ohne neue Plots zu erstellen.

Ansatz 1: Löschen und erneutes Plotten

Ein einfacher Weg Methode besteht darin, das vorhandene Diagramm durch Aufrufen von graph1.clear() und graph2.clear() zu löschen und dann die Daten erneut darzustellen. Es ist zwar einfacher, aber auch langsamer.

Ansatz 2: Plotdaten aktualisieren

Ein alternativer Ansatz, der deutlich schneller ist, beinhaltet die Aktualisierung der Daten vorhandener Plotobjekte. Dies erfordert eine leichte Anpassung Ihres Codes:

def plots():
    global vlgaBuffSorted
    cntr()

    result = collections.defaultdict(list)
    for d in vlgaBuffSorted:
        result[d['event']].append(d)

    result_list = result.values()

    f = Figure()
    graph1 = f.add_subplot(211)
    graph2 = f.add_subplot(212, sharex=graph1)

    # Create plot objects
    vds_line, = graph1.plot([], [], 'bo', label='a')
    vgs_line, = graph1.plot([], [], 'rp', label='b')
    isub_line, = graph2.plot([], [], 'b-', label='c')

    for item in result_list:
        # Update plot data
        vds_line.set_data([], [])
        vgs_line.set_data([], [])
        isub_line.set_data([], [])

        tL = []
        vgsL = []
        vdsL = []
        isubL = []
        for dict in item:
            tL.append(dict['time'])
            vgsL.append(dict['vgs'])
            vdsL.append(dict['vds'])
            isubL.append(dict['isub'])

        # Update plot data
        vds_line.set_data(tL, vdsL)
        vgs_line.set_data(tL, vgsL)
        isub_line.set_data(tL, isubL)

    # Draw the plot
    f.canvas.draw()
    f.canvas.flush_events()
Nach dem Login kopieren

Bei diesem Ansatz erstellen Sie Plotobjekte (z. B. vds_line) und aktualisieren dann deren Daten bei jeder Iteration. Die Methoden „draw()“ und „flush_events()“ werden verwendet, um den aktualisierten Plot im Tkinter-Fenster anzuzeigen.

Durch die Wahl des geeigneten Ansatzes können Sie Plots in Matplotlib innerhalb Ihrer Tkinter-Anwendung effektiv aktualisieren.

Das obige ist der detaillierte Inhalt vonWie kann ich Matplotlib-Plots in einer Tkinter-Anwendung effizient aktualisieren, nachdem ich die Zeitskala geändert habe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage