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