diff --git a/Demo_Pyploy_Bar_Chart2.py b/Demo_Pyploy_Bar_Chart2.py new file mode 100644 index 00000000..37c9339c --- /dev/null +++ b/Demo_Pyploy_Bar_Chart2.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python +import sys +if sys.version_info[0] >= 3: + import PySimpleGUI as sg +else: + import PySimpleGUI27 as sg + +import matplotlib +matplotlib.use('TkAgg') +from matplotlib.backends.backend_tkagg import FigureCanvasAgg +import matplotlib.backends.tkagg as tkagg +import tkinter as Tk + +""" +Demonstrates one way of embedding Matplotlib figures into a PySimpleGUI window. + +Paste your Pyplot code into the section marked below. + +Do all of your plotting as you normally would, but do NOT call plt.show(). +Stop just short of calling plt.show() and let the GUI do the rest. + +The remainder of the program will convert your plot and display it in the GUI. +If you want to change the GUI, make changes to the GUI portion marked below. + +""" + +#------------------------------- PASTE YOUR MATPLOTLIB CODE HERE ------------------------------- +import matplotlib.pyplot as plt +import numpy as np +label = ['Adventure', 'Action', 'Drama', 'Comedy', 'Thriller/Suspense', 'Horror', 'Romantic Comedy', 'Musical', + 'Documentary', 'Black Comedy', 'Western', 'Concert/Performance', 'Multiple Genres', 'Reality'] +no_movies = [ + 941, + 854, + 4595, + 2125, + 942, + 509, + 548, + 149, + 1952, + 161, + 64, + 61, + 35, + 5 +] + +index = np.arange(len(label)) +plt.bar(index, no_movies) +plt.xlabel('Genre', fontsize=5) +plt.ylabel('No of Movies', fontsize=5) +plt.xticks(index, label, fontsize=5, rotation=30) +plt.title('Market Share for Each Genre 1995-2017') + +#------------------------------- END OF YOUR MATPLOTLIB CODE ------------------------------- + +#------------------------------- Beginning of Matplotlib helper code ----------------------- + + +def draw_figure(canvas, figure, loc=(0, 0)): + """ Draw a matplotlib figure onto a Tk canvas + + loc: location of top-left corner of figure on canvas in pixels. + + Inspired by matplotlib source: lib/matplotlib/backends/backend_tkagg.py + """ + figure_canvas_agg = FigureCanvasAgg(figure) + figure_canvas_agg.draw() + figure_x, figure_y, figure_w, figure_h = figure.bbox.bounds + figure_w, figure_h = int(figure_w), int(figure_h) + photo = Tk.PhotoImage(master=canvas, width=figure_w, height=figure_h) + canvas.create_image(loc[0] + figure_w/2, loc[1] + figure_h/2, image=photo) + tkagg.blit(photo, figure_canvas_agg.get_renderer()._renderer, colormode=2) + return photo + +#------------------------------- Beginning of GUI CODE ------------------------------- + +fig = plt.gcf() # if using Pyplot then get the figure from the plot +figure_x, figure_y, figure_w, figure_h = fig.bbox.bounds + +# define the window layout +layout = [[sg.Text('Plot test', font='Any 18')], + [sg.Canvas(size=(figure_w, figure_h), key='canvas')], + [sg.OK(pad=((figure_w / 2, 0), 3), size=(4, 2))]] + +# create the form and show it without the plot +window = sg.Window('Demo Application - Embedding Matplotlib In PySimpleGUI', force_toplevel=True).Layout(layout).Finalize() + +# add the plot to the window +fig_photo = draw_figure(window.FindElement('canvas').TKCanvas, fig) + +# show it all again and get buttons +button, values = window.Read()