Changeset 52b1f77 in sasview for guitools/PlotPanel.py
- Timestamp:
- Apr 1, 2008 2:27:52 PM (17 years ago)
- Branches:
- master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
- Children:
- f79b054
- Parents:
- 8e4516f
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
guitools/PlotPanel.py
r15f0e94 r52b1f77 1 import wx 1 import wx.lib.newevent 2 2 import matplotlib 3 3 matplotlib.interactive(False) … … 7 7 from matplotlib.figure import Figure 8 8 import os 9 9 import fittings 10 10 from canvas import FigureCanvas 11 11 #TODO: make the plottables interactive 12 12 13 from plottables import Graph 13 14 #(FuncFitEvent, EVT_FUNC_FIT) = wx.lib.newevent.NewEvent() 15 import math,pylab 14 16 def show_tree(obj,d=0): 15 17 """Handy function for displaying a tree of graph objects""" … … 29 31 dpi = None, **kwargs): 30 32 wx.Panel.__init__(self, parent, id = id, **kwargs) 31 33 self.parent = parent 32 34 self.figure = Figure(None, dpi) 33 35 #self.figure = pylab.Figure(None, dpi) … … 42 44 self.figure.subplots_adjust(left=.2, bottom=.2) 43 45 self.yscale = 'linear' 44 46 self.xscale = 'linear' 45 47 sizer = wx.BoxSizer(wx.VERTICAL) 46 48 sizer.Add(self.canvas,1,wx.EXPAND) … … 49 51 # Graph object to manage the plottables 50 52 self.graph = Graph() 51 53 #self.Bind(EVT_FUNC_FIT, self.onFitRange) 52 54 self.Bind(wx.EVT_CONTEXT_MENU, self.onContextMenu) 53 55 #self.Bind(EVT_PROPERTY, self._onEVT_FUNC_PROPERTY) 54 56 # Define some constants 55 57 self.colorlist = ['b','g','r','c','m','y'] 56 58 self.symbollist = ['o','x','^','v','<','>','+','s','d','D','h','H','p'] 59 #User scale 60 self.xscales ="" 61 self.yscales ="" 62 # keep track if the previous transformation 63 self.prevXtrans ="x" 64 self.prevYtrans ="Log(y)" 65 66 def onFitting(self, event): 67 list =[] 68 list = self.graph.returnPlottable() 69 from fitDialog import LinearFit 70 71 print len(list) 72 if len(list.keys())>0: 73 first_item = list.keys()[0] 74 print first_item, list[first_item].__class__.__name__ 75 dlg = LinearFit( None, first_item, self.onFitDisplay, -1, 'Fitting') 76 dlg.ShowModal() 77 78 def _onProperties(self, event): 79 80 from PropertyDialog import Properties 81 dial = Properties(self, -1, 'Properties') 82 if dial.ShowModal() == wx.ID_OK: 83 self.xscales, self.yscales = dial.getValues() 84 self._onEVT_FUNC_PROPERTY() 85 dial.Destroy() 86 87 def toX(self,x): 88 return x 89 90 def toX2(self,x): 91 """ 92 Calculate x^(2) 93 @param x: float value 94 """ 95 return math.pow(x,2) 96 def fromX2(self,x): 97 """ 98 Calculate square root of x 99 @param x: float value 100 """ 101 if x >=0 : 102 return math.sqrt(x) 103 else: 104 return 0 105 def toLogXY(self,x): 106 """ 107 calculate log x 108 @param x: float value 109 """ 110 if x > 0: 111 return math.log(x) 112 else: 113 return 0 114 def fromLogXY(self,x): 115 """ 116 Calculate e^(x) 117 @param x: float value 118 """ 119 if x.__class__.__name__ == 'list': 120 temp =[] 121 for x_i in x: 122 temp.append(math.exp(x_i)) 123 return temp 124 else: 125 return math.exp(x) 126 57 127 58 128 def set_yscale(self, scale='linear'): … … 62 132 def get_yscale(self): 63 133 return self.yscale 134 135 def set_xscale(self, scale='linear'): 136 self.subplot.set_xscale(scale) 137 self.xscale = scale 138 139 def get_xscale(self): 140 return self.xscale 64 141 65 142 def SetColor(self, rgbtuple): … … 120 197 slicerpop.Append(313,'&Save image', 'Save image as PNG') 121 198 wx.EVT_MENU(self, 313, self.onSaveImage) 122 199 slicerpop.Append(316, '&Load 1D data file') 200 201 wx.EVT_MENU(self, 314, self.onSave1DData) 202 wx.EVT_MENU(self, 316, self._onLoad1DData) 203 slicerpop.AppendSeparator() 204 slicerpop.Append(315, '&Properties') 205 206 slicerpop.AppendSeparator() 207 slicerpop.Append(317, '&Linear Fit') 208 209 wx.EVT_MENU(self, 314, self.onSave1DData) 210 wx.EVT_MENU(self, 316, self._onLoad1DData) 211 wx.EVT_MENU(self, 315, self._onProperties) 212 wx.EVT_MENU(self, 317, self.onFitting) 213 123 214 pos = event.GetPosition() 124 215 pos = self.ScreenToClient(pos) … … 199 290 """Draw markers with error bars""" 200 291 self.subplot.set_yscale('linear') 292 self.subplot.set_xscale('linear') 201 293 # Convert tuple (lo,hi) to array [(x-lo),(hi-x)] 202 294 if dx != None and type(dx) == type(()): … … 209 301 marker=self._symbol(symbol),linestyle='',label=label) 210 302 else: 211 col = self._color(color)212 303 self.subplot.errorbar(x, y, yerr=dy, xerr=None, 213 ecolor= col, capsize=2,linestyle='', barsabove=False,304 ecolor=self._color(color), capsize=2,linestyle='', barsabove=False, 214 305 marker=self._symbol(symbol), 215 306 lolims=False, uplims=False, 216 xlolims=False, xuplims=False,label=label, 217 mec = col, mfc = col) 307 xlolims=False, xuplims=False,label=label) 218 308 219 309 self.subplot.set_yscale(self.yscale) 310 self.subplot.set_xscale(self.xscale) 220 311 221 312 def curve(self,x,y,dy=None,color=0,symbol=0,label=None): … … 223 314 c = self._color(color) 224 315 self.subplot.set_yscale('linear') 316 self.subplot.set_xscale('linear') 225 317 226 318 hlist = self.subplot.plot(x,y,color=c,marker='',linestyle='-',label=label) 227 319 228 320 self.subplot.set_yscale(self.yscale) 321 self.subplot.set_xscale(self.xscale) 229 322 230 323 def _color(self,c): … … 235 328 """Return a particular symbol""" 236 329 return self.symbollist[s%len(self.symbollist)] 237 238 239 240 330 331 def _onEVT_FUNC_PROPERTY(self): 332 """ 333 Receive the scale from myDialog and set the scale 334 """ 335 list =[] 336 list = self.graph.returnPlottable() 337 for item in list: 338 if ( self.xscales=="x" ): 339 if self.prevXtrans == "x^(2)": 340 item.transform_x( self.fromX2, self.errFunc ) 341 #elif self.prevXtrans == "Log(x)" 342 #item.transform_x( self.fromLogXY,self.errFunc ) 343 print "Values of x",item.x[0:5] 344 print "Values of view x",item.view.x[0:5] 345 self.set_xscale("linear") 346 self.graph.xaxis('\\rm{q} ', 'A^{-1}') 347 348 if ( self.xscales=="x^(2)" ): 349 #if self.prevXtrans == "Log(x)": 350 #item.transform_x( self.fromLogXY, self.errFunc ) 351 if self.prevXtrans != "x^(2)": 352 item.transform_x( self.toX2, self.errFunc ) 353 print "Values of x",item.x[0:5] 354 print "Values of view x^(2)",item.view.x[0:5] 355 self.set_xscale('linear') 356 self.graph.xaxis('\\rm{q^{2}} ', 'A^{-2}') 357 358 if (self.xscales=="Log(x)" ): 359 if self.prevXtrans == "x^(2)": 360 item.transform_x( self.fromX2, self.errFunc ) 361 #elif self.prevXtrans == "Log(x)": 362 #item.transform_x( self.toLogXY, self.errFunc ) 363 #self.set_xscale("linear") 364 self.set_xscale('log') 365 self.graph.xaxis('\\rm{log(q)} ', 'A^{-1}') 366 367 if ( self.yscales=="y" ): 368 if self.prevYtrans == "y^(2)": 369 item.transform_y( self.toX2, self.errFunc ) 370 #elif self.prevXtrans == "Log(y)" 371 #item.transform_y( self.fromLogXY.errFunc ) 372 self.set_yscale("linear") 373 self.graph.yaxis("\\rm{Intensity} ","cm^{-1}") 374 375 if ( self.yscales=="Log(y)" ): 376 if self.prevYtrans == "y^(2)": 377 item.transform_y( self.fromX2, self.errFunc ) 378 #elif self.prevYtrans != "Log(y)": 379 #item.transform_y( self.toLogXY, self.errFunc ) 380 #self.set_yscale("linear") 381 self.set_yscale("log") 382 self.graph.yaxis("\\rm{Intensity} ","cm^{-1}") 383 384 if ( self.yscales=="y^(2)" ): 385 #if self.prevYtrans == "Log(y)": 386 #item.transform_y( self.fromLogXY, self.errFunc ) 387 if self.prevYtrans != "y^(2)": 388 item.transform_y( self.toX2, self.errFunc ) 389 self.set_yscale("linear") 390 self.graph.yaxis("\\rm{Intensity^{2}} ","cm^{-2}") 391 item.set_View(item.x,item.y) 392 393 self.prevXtrans = self.xscales 394 self.prevYtrans = self.yscales 395 396 self.graph.render(self) 397 self.subplot.figure.canvas.draw_idle() 398 399 def errFunc(self,x): 400 """ 401 calculate log x 402 @param x: float value 403 """ 404 if x >=0: 405 return math.sqrt(x) 406 else: 407 return 0 408 409 410 def onFitDisplay(self, plottable): 411 self.graph.add(plottable) 412 self.graph.render(self) 413 self.subplot.figure.canvas.draw_idle() 414 415 241 416 class NoRepaintCanvas(FigureCanvasWxAgg): 242 417 """We subclass FigureCanvasWxAgg, overriding the _onPaint method, so that
Note: See TracChangeset
for help on using the changeset viewer.