Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pynxc/waxy/demos/plotit.py
diff options
context:
space:
mode:
Diffstat (limited to 'pynxc/waxy/demos/plotit.py')
-rw-r--r--pynxc/waxy/demos/plotit.py151
1 files changed, 151 insertions, 0 deletions
diff --git a/pynxc/waxy/demos/plotit.py b/pynxc/waxy/demos/plotit.py
new file mode 100644
index 0000000..f5eb429
--- /dev/null
+++ b/pynxc/waxy/demos/plotit.py
@@ -0,0 +1,151 @@
+from numpy import *
+
+from waxy import *
+
+from matplotlib.backends.backend_wxagg import FigureCanvasWx as FigureCanvas
+from matplotlib.backends.backend_wx import FigureManager
+from matplotlib.figure import Figure
+from matplotlib.axes import Subplot
+
+def export_fig(parent,filename=None):
+ from matplotlib.backends.backend_pdf import FigureCanvasPdf
+
+ if not filename:
+
+# parent.canvas.Show(False)
+
+ dlg = FileDialog(parent, "Export to...",default_dir=os.getcwd(),
+ wildcard='PNG Files|*.png|PDF Files|*.pdf|EPS Files|*.eps|SVG Files|*.svg|All Files|*.*',save=1)
+ result = dlg.ShowModal()
+ if result == 'ok':
+ filename = dlg.GetPaths()[0]
+ else:
+ filename=None
+
+ filter_index=dlg.GetFilterIndex()
+
+ dlg.Destroy()
+
+ parent.canvas.Show(True)
+
+
+ if filename:
+
+ nme,ext=os.path.splitext(filename)
+ if not ext: # do the filter index
+ ext='.pdf'
+
+ print filter_index
+
+ if filter_index==0:
+ ext='.png'
+ elif filter_index==1:
+ ext='.pdf'
+ elif filter_index==2:
+ ext='.eps'
+
+ filename=nme+ext
+
+ nme,ext=os.path.splitext(filename)
+
+ if os.path.exists(filename):
+ dlg = MessageDialog(parent, '"%s" already exists. Do you want to replace it?' % filename,
+ 'A file or folder with the same name already exists in plasticity. Replacing it will overwrite its current contents.',icon='warning',cancel=1)
+ result = dlg.ShowModal()
+
+ if result=='cancel':
+ return
+
+ if ext=='.pdf': # hack to fix a problem in the pdf backend
+ orig_dpi = parent.fig.dpi.get()
+ canvas_pdf = FigureCanvasPdf(parent.fig)
+ parent.fig.savefig(filename)
+ parent.fig.set_canvas(parent.canvas) # restore automagically switched attributes
+ parent.fig.dpi.set(orig_dpi)
+ else:
+ parent.fig.savefig(filename)
+
+
+
+class MainFrame(Frame):
+
+ def __init__(self,x,y,style,parent=None):
+ self.fig=None
+ Frame.__init__(self,parent,'Plot','H',size=(750,750))
+ self.x=x
+ self.y=y
+ self.style=style
+ self.Plot()
+
+ def Body(self):
+
+ self.CreateMenu()
+ self.CenterOnScreen()
+
+ self.fig = Figure(figsize=(7,5),dpi=100)
+ self.canvas = FigureCanvas(self, -1, self.fig)
+ self.figmgr = FigureManager(self.canvas, 1, self)
+
+ self.axes = [self.fig.add_subplot(111)]
+
+ def CreateMenu(self):
+
+ menubar = MenuBar()
+
+ menu = Menu(self)
+ menu.Append("&Run", self.Run, "Run",hotkey="Ctrl+R")
+ menu.Append("Export Figure...", self.Export, "Export the Screen")
+ menu.Append("&Quit", self.Quit, "Quit",hotkey="Ctrl+Q")
+
+ menubar.Append(menu, "&File")
+ self.running=False
+
+ self.SetMenuBar(menubar)
+ self.CreateStatusBar()
+
+ def Export(self,event=None):
+ export_fig(self)
+
+
+ def Run(self,event=None):
+
+ if self.running:
+ self.y=self.y_bak
+ self.UpdatePlot()
+
+ else:
+ t=0.0
+ self.y_bak=self.y
+
+ for t in linspace(0,2*pi*4,100):
+ self.y=y*cos(t)
+ self.UpdatePlot()
+
+ self.running=not self.running
+
+ def UpdatePlot(self):
+ self.h.set_ydata(self.y)
+ self.canvas.draw()
+ self.canvas.gui_repaint()
+ wx.Yield()
+
+ def Plot(self):
+ self.axes[0].clear()
+ self.h,=self.axes[0].plot(self.x,self.y,self.style,linewidth=3)
+
+ self.canvas.draw()
+ self.canvas.gui_repaint()
+
+
+ def Quit(self,event=None):
+ self.Close()
+
+def Plot(x,y,style='-'):
+ app = Application(MainFrame,x,y,style)
+ app.Run()
+
+if __name__=="__main__":
+
+ x=linspace(-10,10,100)
+ y=x*sin(x)+x
+ Plot(x,y)