gpt4 book ai didi

python - Tkinter matplotlib Canvas 对于实时数据更新太慢

转载 作者:行者123 更新时间:2023-12-03 16:18:25 26 4
gpt4 key购买 nike

我正在使用一个每秒发送 100 个读数的设备,我希望我的 GUI 有一个显示最后 300 个收集点的数据图。但是,我发现:

  • 将新数据点附加到 y 轴队列
  • 清除已经存在的情节
  • 绘制新数据列表
  • 重绘 Canvas

  • 在每个点之后需要将近 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 for matplotlib 解决了这个问题,并用带有图形图像的标签替换了 Tkinter Canvas 。将尝试在github上上传代码并链接它。

    最佳答案

    我不会为每个新点重建您的图形,而是修改您已有的 LineArtist。

    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)

    # capture the artist
    self.line, = 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)

    # update the artist
    self.line.set_xdata(list(range(len(self.y))))
    self.line.set_ydata(list(self.y.queue))

    关于python - Tkinter matplotlib Canvas 对于实时数据更新太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62839020/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com