Maison >développement back-end >Tutoriel Python >Comment puis-je mettre à jour efficacement les tracés Matplotlib dans une application Tkinter après avoir modifié l'échelle de temps ?

Comment puis-je mettre à jour efficacement les tracés Matplotlib dans une application Tkinter après avoir modifié l'échelle de temps ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-09 07:10:08194parcourir

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

Mise à jour des tracés dans Matplotlib pour Tkinter

Vous avez rencontré des difficultés lors de la mise à jour des tracés dans Matplotlib au sein d'une application Tkinter. Vous permettez aux utilisateurs d'ajuster les unités de l'échelle de temps, ce qui nécessite de recalculer et de mettre à jour le tracé sans créer de nouveaux tracés.

Approche 1 : Effacement et retraçage

Une méthode simple La méthode consiste à effacer le tracé existant en appelant graph1.clear() et graph2.clear(), puis à retracer les données. Bien que ce soit plus simple, c'est également plus lent.

Approche 2 : mise à jour des données de tracé

Une approche alternative, nettement plus rapide, consiste à mettre à jour les données des objets de tracé existants. Cela nécessite d'ajuster légèrement votre code :

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()

Dans cette approche, vous créez des objets de tracé (par exemple, vds_line), puis mettez à jour leurs données à chaque itération. Les méthodes draw() et flush_events() sont utilisées pour afficher le tracé mis à jour sur la fenêtre Tkinter.

En choisissant l'approche appropriée, vous pouvez efficacement mettre à jour les tracés dans Matplotlib au sein de votre application Tkinter.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn