Note that there are some explanatory texts on larger screens.

plurals
  1. POHow do I refresh a matplotlib plot in a Tkinter window?
    primarykey
    data
    text
    <p>I was wondering if anyone had an idea as to why the code below does not display a graph with a line in it after the button on the GUI is pressed. I would like to create a program that executes a long list of commands after a set of data is imported by clicking a button. One of these commands would be to display the spectral data on a graph within the same window. Here is what I have so far:</p> <pre><code># import modules that I'm using import matplotlib matplotlib.use('TKAgg') from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg from matplotlib.figure import Figure import matplotlib.pyplot as pltlib import Tkinter from Tkinter import * import numpy as np import scipy as sc #import matplotlib.pyplot as pltlib # lmfit is imported becuase parameters are allowed to depend on each other along with bounds, etc. from lmfit import minimize, Parameters, Minimizer #Make object for application class App_Window(Tkinter.Tk): def __init__(self,parent): Tkinter.Tk.__init__(self,parent) self.parent = parent self.initialize() def initialize(self): button = Tkinter.Button(self,text="Open File",command=self.OnButtonClick).pack(side=Tkinter.TOP) self.canvasFig=pltlib.figure(1) Fig = matplotlib.figure.Figure(figsize=(5,4),dpi=100) FigSubPlot = Fig.add_subplot(111) x=[] y=[] self.line1, = FigSubPlot.plot(x,y,'r-') self.canvas = matplotlib.backends.backend_tkagg.FigureCanvasTkAgg(Fig, master=self) self.canvas.show() self.canvas.get_tk_widget().pack(side=Tkinter.TOP, fill=Tkinter.BOTH, expand=1) self.canvas._tkcanvas.pack(side=Tkinter.TOP, fill=Tkinter.BOTH, expand=1) self.resizable(True,False) self.update() def refreshFigure(self,x,y): self.line1.set_xdata(x) self.line1.set_ydata(y) self.canvas.draw() def OnButtonClick(self): # file is opened here and some data is taken # I've just set some arrays here so it will compile alone x=[] y=[] for num in range(0,1000):x.append(num*.001+1) # just some random function is given here, the real data is a UV-Vis spectrum for num2 in range(0,1000):y.append(sc.math.sin(num2*.06)+sc.math.e**(num2*.001)) X = np.array(x) Y = np.array(y) self.refreshFigure(X,Y) if __name__ == "__main__": MainWindow = App_Window(None) MainWindow.mainloop() </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload