我的代码如下。目标是将多个随机漫游绘制到FigureCanvasTkAgg上。
我没有基于threading.Thread
为我的自定义Thread类添加代码,但它只是在.starting()
到.stopping()
的无限循环上重复输入函数。绑定按钮。
我发现循环运行越多,绘图变得越慢。我相信瓶颈在ax.plots(s)
,plots.show()
,据我所知,这种方法可以有效地再次绘制每个先前的情节。假设我可以调用ax.clear()
来再次加速循环。
我是否应采用不同的方式更新此图像以优化仅用于不清除的绘图?
(对优化其余部分不感兴趣,因为它们似乎没有按循环改变,因此无法解释减速情况,可以修正)
import numpy as np
import threading
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
def Updater(ax,plots):
s = np.zeros(400)
for i in range(399):
s[i+1]=s[i]+random.choice([-1, 1])
ax.plot(s)
plots.show()
tk = Tk()
fig = plt.figure()
ax = fig.add_subplot(111)
plots = FigureCanvasTkAgg(fig,tk)
plots.get_tk_widget().pack()
Thread(lambda ax=ax,plots=plots: Updater(ax,plots)).starting()
tk.mainloop()