首页 >后端开发 >Python教程 >更改时间尺度后如何有效更新 Tkinter 应用程序中的 Matplotlib 图?

更改时间尺度后如何有效更新 Tkinter 应用程序中的 Matplotlib 图?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-09 07:10:08183浏览

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

在 Tkinter 的 Matplotlib 中更新绘图

您在 Tkinter 应用程序中更新 Matplotlib 中的绘图时遇到了困难。您允许用户调整时间刻度单位,这需要重新计算和更新绘图,而无需创建新绘图。

方法 1:清除和重新绘图

简单的方法方法是通过调用 graph1.clear() 和 graph2.clear() 清除现有绘图,然后重新绘制数据。虽然它更简单,但也更慢。

方法 2:更新绘图数据

另一种方法,速度明显更快,涉及更新现有绘图对象的数据。这需要稍微调整您的代码:

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

在这种方法中,您创建绘图对象(例如,vds_line),然后在每次迭代时更新其数据。 draw() 和lush_events() 方法用于在 Tkinter 窗口上显示更新的绘图。

通过选择适当的方法,您可以在 Tkinter 应用程序中有效地更新 Matplotlib 中的绘图。

以上是更改时间尺度后如何有效更新 Tkinter 应用程序中的 Matplotlib 图?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn