This is how I have declared these things:
        self.win = master
        self.geo = self.win.geometry
        self.geo("800x800+400+400")
        self.win['bg'] = '#DCDCDC'
        self.fig = Figure(figsize=(6, 4), dpi=96)
        self.ax =  self.fig.add_subplot(111)
        self.graph = FigureCanvasTkAgg(self.fig, master=self.win)
        self.canvas = self.graph.get_tk_widget()
        #Image for foot
        self.img = Label(image = "")
def clean_button(self):
        self.play.place_forget()
        self.stop.place_forget()
        self.scale.place_forget()
    def clean_img(self):
        self.img.config(image='')
    def clean_flush(self):
        self.fig.canvas.draw()
        self.fig.canvas.flush_events()
I have mentioned UI elements in constructor and relevant cleaning functions. Apart from this I also call this before setting an image on screen:
self.graph.get_tk_widget().delete("all")
However, this leaves white space in the backend

Im calling these functions before this:
       self.clean_flush()
        self.clean_button()
        self.clean_img()
before this:
load = Image.open('centertext_out.png')
    load= load.resize((500, 500), Image.ANTIALIAS)
    render = ImageTk.PhotoImage(load)
    self.img = Label( image=render)
    self.img.image = render
    self.img.place(x=150, y=5)