为了账号安全,请及时绑定邮箱和手机立即绑定

如何更新 tkinter Canvas 上的 matplotlib 子图?

如何更新 tkinter Canvas 上的 matplotlib 子图?

慕仙森 2024-01-04 16:39:22
我想更新嵌入到Canvastkinter GUI 中的子图。无论我尝试什么,我的意图都会失败。看看我有多远:from tkinter import *from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk)import matplotlib.pyplot as pltimport timeroot = Tk()figId = plt.figure()canvas = FigureCanvasTkAgg(figId, master=root)canvas.get_tk_widget().pack()canvas.draw()vals1 = [5, 6, 3, 9]vals2 = vals1for i in range(0, len(vals1)+1):    toPlot = vals1[0:i]    plt.subplot(211).plot(toPlot)    plt.subplot(212).plot(toPlot)    time.sleep(1)root.mainloop()我发现做类似的事情plt.pause(.1)不是正确的方法。对我来说,似乎我必须介绍matplotlib.animation,但我真的不知道该怎么做。
查看完整描述

1 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

我找到了答案:


import random

from itertools import count

import matplotlib.pyplot as plt

from matplotlib.animation import FuncAnimation

from tkinter import *

from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk)


x_vals = []

y_vals1 = []

y_vals2 = []


index = count()


root = Tk()

figId = plt.figure()

canvas = FigureCanvasTkAgg(figId, master=root)

canvas.get_tk_widget().pack()

canvas.draw()


def animate(i):

    x_vals.append(next(index))

    y_vals1.append(random.randint(0, 5))

    y_vals2.append(random.randint(0, 5))

    plt.cla()

    plt.plot(x_vals, y_vals1)

    plt.plot(x_vals, y_vals2)


ani = FuncAnimation(plt.gcf(), animate, interval=1000)


root.mainloop()


查看完整回答
反对 回复 2024-01-04
  • 1 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信