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