title: Plotting multiple graphs in separate tkinter figures within the same window
body: <p>I'm trying to create a GUI using tkinter that will plot multiple plots when prompted. Right now my code works and it plots all of the graphs onto one figure. I would like to plot the graphs on separate figures, in the same GUI. </p>
  
  <p>This is my code that plots all of the graphs in the same tkinter figure:</p>
  
  <pre><code>import myModule
  from myModule import *
  import SA_apis
  from SA_apis import *
  import matplotlib
  matplotlib.use("TkAgg")
  from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg,   NavigationToolbar2TkAgg
  from matplotlib.figure import Figure
  import tkinter as tk
  from tkinter import ttk
  from matplotlib import pyplot as plt
  
  LARGE_FONT= ("Verdana", 12)
  NORM_FONT= ("Verdana", 10)
  SMALL_FONT= ("Verdana", 8)
  plt.style.use("dark_background")
  plt.style.use("seaborn-bright")
  
  def popupmsg(msg):
      popup = tk.Tk()
      popup.wm_title("Menu")
      label = ttk.Label(popup, text=msg, font=NORM_FONT)
      label.pack(side="top", fill="x", pady=10)
      B1 = ttk.Button(popup, text="Okay", command = popup.destroy)
      B1.pack()
      popup.mainloop()
  
  
  class TkGraph(tk.Tk):
      def __init__(self, *args, **kwargs):
          tk.Tk.__init__(self, *args, **kwargs)
          tk.Tk.wm_title(self, "TkGraph")
  
          container = tk.Frame(self)
          container.pack(side="top", fill="both", expand = True)
          container.grid_rowconfigure(0, weight=1)
          container.grid_columnconfigure(0, weight=1)
  
          menubar = tk.Menu(container)
          filemenu = tk.Menu(menubar, tearoff=0)
          filemenu.add_command(label="New", command = lambda: popupmsg("This is not yet supported"))
          filemenu.add_command(label="Add", command = lambda: popupmsg("This is not yet supported"))
          filemenu.add_command(label="Exit", command=quit)
          menubar.add_cascade(label="File", menu=filemenu)
          tk.Tk.config(self, menu=menubar)
  
          parameter = tk.Menu(menubar, tearoff=0)
          parameter.add_command(label="Selection", command = lambda: popupmsg("This is not yet supported"))
          menubar.add_cascade(label="Parameter", menu=parameter)
          tk.Tk.config(self, menu=menubar)
  
          timemenu = tk.Menu(menubar, tearoff=0)
          timemenu.add_command(label="Selection", command = lambda: popupmsg("This is not yet supported"))
          menubar.add_cascade(label="Time", menu=parameter)
          tk.Tk.config(self, menu=menubar)
  
          helpmenu = tk.Menu(menubar, tearoff=0)
          helpmenu.add_command(label="Selection", command = lambda: popupmsg("This is not yet supported"))
           menubar.add_cascade(label="Help", menu=parameter)
          tk.Tk.config(self, menu=menubar)
  
           self.frames = {}
          for F in (StartPage, PageOne):
              frame = F(container, self)
              self.frames[F] = frame
              frame.grid(row=0, column=0, sticky="nsew")
           self.show_frame(StartPage)
      def show_frame(self, cont):
          frame = self.frames[cont]
          frame.tkraise()
  
  class StartPage(tk.Frame):
      def __init__(self, parent, controller):
          tk.Frame.__init__(self,parent)
          label = tk.Label(self, text="Home", font=LARGE_FONT)
          label.pack(pady=10,padx=10)
          button1 = ttk.Button(self, text="Graph",
          command=lambda: controller.show_frame(PageOne))
          button1.pack()
  
  
   class PageOne(tk.Frame):
      def __init__(self, parent, controller):
          tk.Frame.__init__(self, parent)
          label = tk.Label(self, text="Graph", font=LARGE_FONT)
          label.pack(pady=10,padx=10)
          button1 = ttk.Button(self, text="Back to Home",
                          command=lambda: controller.show_frame(StartPage))
          button1.pack()
  
      """This is the code for the plotted graph, for each parameter you wish to plot you need to have a seperate x, y coordinate system.
      You got the amount of points for each parameter on SA_apis now you just paste that number in the code."""
  
      #Graph Code
      x = (g[0].time[:111673])
      y = (g[0].data.f[:111673])
      x2 = (h[0].time[:142642])
      y2 = (h[0].data.f[:142642])
      x3 = (j[0].time[:134970])
      y3 = j[0].data.f[:134970]
      x4 = (p[0].time[:147542])
      y4 = (p[0].data.f[:147542])
      plt.subplot()
      fig = plt.figure()
  
      """For each parameters x,y coordinates you will need a seperate  plt.plot()"""
      plt.plot(x, y)
      plt.plot(x2, y2)
      plt.plot(x3, y3)
      plt.plot(x4, y4)
      #descr = (g[0].descr)
      plt.title('(descr)', fontsize = 15)
      plt.xlabel('Time', fontsize=12)
      plt.ylabel('Data', fontsize=12)
      plt.grid(linestyle = 'dashed')   
  
      canvas = FigureCanvasTkAgg(fig, self)
      canvas.show()
      canvas.get_tk_widget().pack(side=tk.BOTTOM, fill=tk.BOTH, expand=True)
  
      toolbar = NavigationToolbar2TkAgg(canvas, self)
      toolbar.update()
      canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
  
  app = TkGraph()
  app.mainloop()
  </code></pre>
  
  <p><a href="https://i.stack.imgur.com/w7kMN.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/w7kMN.png" alt="enter image description here"></a>
   I tried separating the graphs like this:</p>
  
  <pre><code>    x = (g[0].time[:111673])
      y = (g[0].data.f[:111673])
      plt.plot(x, y)
      plt.title('(descr)', fontsize = 15)
      plt.xlabel('Time', fontsize=12)
      plt.ylabel('Data', fontsize=12)
      plt.grid(linestyle = 'dashed')
      fig = plt.figure()
  
      x2 = (h[0].time[:142642])
      y2 = (h[0].data.f[:142642])
      plt.plot(x2, y2)
      plt.title('(descr)', fontsize = 15)
      plt.xlabel('Time', fontsize=12)
      plt.ylabel('Data', fontsize=12)
      plt.grid(linestyle = 'dashed')
      fig = plt.figure()
  
      x3 = (j[0].time[:134970])
      y3 = (j[0].data.f[:134970])
      plt.plot(x3, y3)
      plt.title('(descr)', fontsize = 15)
      plt.xlabel('Time', fontsize=12)
      plt.ylabel('Data', fontsize=12)
      plt.grid(linestyle = 'dashed')
      fig = plt.figure()
  
      x4 = (p[0].time[:147542])
      y4 = (p[0].data.f[:147542])
      plt.plot(x4, y4)
      plt.title('(descr)', fontsize = 15)
      plt.xlabel('Time', fontsize=12)
      plt.ylabel('Data', fontsize=12)
      plt.grid(linestyle = 'dashed')
      fig = plt.figure()
  </code></pre>
  
  <p>But this is tedious,  and doesn't result in all four graphs being plotted in the same tkinter window. This causes and empty tkinter. </p>
  
  <p>MY QUESTION IS THIS: How can I plot multiple graphs in the same tkinter window but in different figures. Ideally they would be plotted next to each other I don't want to create another window. I need the graphs to all be viewed at the same time for comparison. </p>