首頁 > 後端開發 > Python教學 > 更改時間尺度後如何有效更新 Tkinter 應用程式中的 Matplotlib 圖?

更改時間尺度後如何有效更新 Tkinter 應用程式中的 Matplotlib 圖?

Mary-Kate Olsen
發布: 2024-12-09 07:10:08
原創
212 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板