我正在使用一个设备,每秒发送100个读数,并希望我的GUI能够绘制这些数据的图表,显示最近收集的300个点。然而,我发现:
1. 将新数据点添加到y轴队列中 2. 清除已经存在的图形 3. 绘制新数据列表 4. 重新绘制画布
每绘制一个点需要将近0.2-0.4秒,速度非常慢。
以下是我目前正在使用的代码。一个while循环不断检查队列,一旦有新元素被推入它,就会以该元素为参数调用update函数。请问有人能够建议一些提高效率或替代matplotlib的方法吗?
1. 将新数据点添加到y轴队列中 2. 清除已经存在的图形 3. 绘制新数据列表 4. 重新绘制画布
每绘制一个点需要将近0.2-0.4秒,速度非常慢。
以下是我目前正在使用的代码。一个while循环不断检查队列,一旦有新元素被推入它,就会以该元素为参数调用update函数。请问有人能够建议一些提高效率或替代matplotlib的方法吗?
class GraphFrame:
def __init__(self,root,channel,index):
self.root=root
self.frame=tk.Frame(self.root)
self.frame.pack(side=tk.LEFT)
self.y = Queue(maxsize = 300)
self.fig, self.axes = plt.subplots(1,1)
self.axes.plot(list(self.y.queue))
self.canvas = FigureCanvasTkAgg(self.fig, master=self.frame)
self.canvas.draw()
self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, padx=5, pady=5)
def update(self, new_point):
if self.y.full():
self.y.get()
self.y.put(new_point)
self.fig.axes[0].clear()
self.fig.axes[0].plot(list(self.y.queue))
self.canvas.draw()
编辑:使用blitting和将Tkinter画布替换为带有图形图像的标签解决了问题。将尝试在github上上传代码并链接。
Queue
是从哪里导入的? - Paul H从队列中导入Queue
- Mohamed Moustafa