微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Tkinter画布上更新matplotlib子图?

如何解决如何在Tkinter画布上更新matplotlib子图?

我想更新在tkinter GUI中嵌入Canvas中的子图。无论我尝试什么,我的意图都会失败。看看我有多远:

from tkinter import *
from matplotlib.backends.backend_tkagg import (figureCanvasTkAgg,NavigationToolbar2Tk)
import matplotlib.pyplot as plt
import time

root = Tk()

figId = plt.figure()

canvas = figureCanvasTkAgg(figId,master=root)
canvas.get_tk_widget().pack()
canvas.draw()

vals1 = [5,6,3,9]
vals2 = vals1

for 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,但我真的不知道该怎么做。

解决方法

我找到了答案:

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()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。