在两个不同的tk画布中的两个matplotlib数字

时间:2016-01-08 11:48:52

标签: python canvas matplotlib tkinter

我试图让Hans'在Matplotlib plot in Tkinter - every update adds new NavigationToolbar?中回答在2个不同的画布中有2个不同的图。

我遇到了一个问题:我不知道如何参考这两个不同的数据。

虽然fig1在canvas2中的canvas1和fig2中,但是plt.plot函数并没有引用它们 - 而plt.figure()也没有帮助。如何在画布中绘制一个东西,在另一个中绘制不同的东西?

from Tkinter import Tk, Button
import numpy as np
import random
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg

def plotthem():
    plt.figure(1)
    plt.clf()
    x = np.arange(0.0,3.0,0.01)
    y = np.sin(2*np.pi*x+random.random())
    plt.plot(x,y)
    plt.gcf().canvas.draw()

    plt.figure(2)
    plt.clf()
    x = np.arange(0.0,3.0,0.01)
    y = np.tan(2*np.pi*x+random.random())
    plt.plot(x,y)
    plt.gcf().canvas.draw()

root = Tk()

b = Button(root, text="Plot", command = plotthem)
b.grid(row=0, column=0)

# init figures
fig1 = plt.figure()

canvas1 = FigureCanvasTkAgg(fig1, master=root)
toolbar = NavigationToolbar2TkAgg(canvas1, root)
canvas1.get_tk_widget().grid(row=0,column=1)
toolbar.grid(row=1,column=1)

fig2 = plt.figure()
canvas2 = FigureCanvasTkAgg(fig2, master=root)
toolbar = NavigationToolbar2TkAgg(canvas2, root)
canvas2.get_tk_widget().grid(row=0,column=2)
toolbar.grid(row=1,column=2)


root.mainloop()

1 个答案:

答案 0 :(得分:1)

好吧,我想通了...... 您每次都必须使用plt.gcf().canvas.draw(),因为gcf()代表获取当前数字,并与plt.figure(协同工作)它可以更新不同的数字在不同的画布上。