如何在 tkinter Canvas 上更新 matplotlib 子图?
How to update matplotlib subplots on a tkinter Canvas?
我想更新嵌入到 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()
我想更新嵌入到 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()