Python Tkinter: Embed a matplotlib plot in a widget
Question: I have already search for this, for example [Python Tkinter Embed Matplotlib
in GUI](http://stackoverflow.com/questions/4073660/python-tkinter-embed-
matplotlib-in-gui) but still can't figure it out. Basically i am trying to
plot a fancy graph for a player abilities for a basketball game inside the
player window made up with tkinter

    
    
        self.fig = Figure(figsize=(1.5,1.5))
        self.ax = self.fig.add_axes([0.025,0.025,0.95,0.95],polar=True)
        self.plot_widget = FigureCanvasTkAgg(self.fig, master=self.top)
        self.ax.grid(False)
    
        N = 5
        theta = np.arange(0.0, 2*np.pi, 2*np.pi/N)
        radii = [self.thisPlayer.rebounds,self.thisPlayer.freeThrows,self.thisPlayer.steal,self.thisPlayer.underRim,self.thisPlayer.distance]
        width = [2*np.pi/(N),2*np.pi/(N),2*np.pi/(N),2*np.pi/(N),2*np.pi/(N)]
        bars = pl.bar(0 , 20,width=2*np.pi, linewidth = 0) + pl.bar(theta, radii, width=width, bottom=0.2)
    
        for r,bar in zip(radii, bars):
            bar.set_facecolor( cm.jet(r/20.))
            bar.set_alpha(0.5)
    
        self.ax.set_xticklabels([])
        self.ax.set_yticklabels([])
        self.plot_widget.show()
        self.plot_widget.get_tk_widget().pack()
    

what happens is that the player window has now the plot widget but the plot is
not shown. On the other side, just plotting the abilities not embedded in
tkinter works fine. Sorry for my english. thanks in advance


Answer: After you setup `self.ax`, you need to call `self.ax.bar`, not `pl.bar` to
plot the bars in `self.fig`. Here's a runnable example:

    
    
    import matplotlib.pyplot as plt
    import numpy as np
    import Tkinter as tk
    import matplotlib.figure as mplfig
    import matplotlib.backends.backend_tkagg as tkagg
    pi = np.pi
    
    
    class App(object):
        def __init__(self, master):
            self.master = master
            self.thisPlayer = Bunch(
                rebounds=20.0,
                freeThrows=5.0,
                steal=5.0,
                underRim=10,
                distance=10)
            self.fig = mplfig.Figure(figsize=(1.5, 1.5))
            self.ax = self.fig.add_axes([0.025, 0.025, 0.95, 0.95], polar=True)
            self.canvas = tkagg.FigureCanvasTkAgg(self.fig, master=master)
            self.ax.grid(False)
    
            N = 5
            theta = np.arange(0.0, 2 * pi, 2 * pi / N)
            radii = [self.thisPlayer.rebounds, self.thisPlayer.freeThrows,
                     self.thisPlayer.steal, self.thisPlayer.underRim,
                     self.thisPlayer.distance]
            width = [2 * pi / (N)] * 5
            bars = (
                # self.ax.bar(0, 20, width=2 * pi, linewidth=0) +
                self.ax.bar(theta, radii, width=width, bottom=0.2))
            cmap = plt.get_cmap('jet')
            for r, bar in zip(radii, bars):
                bar.set_facecolor(cmap(r / 20.))
                bar.set_alpha(0.5)
            self.ax.set_xticklabels([])
            self.ax.set_yticklabels([])
            self.canvas.get_tk_widget().pack()
            self.canvas.draw()
    
    
    class Bunch(object):
        """
        http://code.activestate.com/recipes/52308
        foo=Bunch(a=1,b=2)
        """
        def __init__(self, **kwds):
            self.__dict__.update(kwds)
    
    
    def main():
        root = tk.Tk()
        app = App(root)
        tk.mainloop()
    
    if __name__ == '__main__':
        main()
    

