Python Tkinter: Embed a matplotlib plot in a widget Python Tkinter: Embed a matplotlib plot in a widget tkinter tkinter

Python Tkinter: Embed a matplotlib plot in a widget


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 pltimport numpy as npimport Tkinter as tkimport matplotlib.figure as mplfigimport matplotlib.backends.backend_tkagg as tkaggpi = np.piclass 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()