Changeset 2451 for trunk/python/asapplotter.py
- Timestamp:
- 03/30/12 19:58:59 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/python/asapplotter.py
r2416 r2451 45 45 if visible is not None: 46 46 self._visible = visible 47 self._plotter = self._newplotter(**kwargs) 48 # additional tool bar 49 self._plotter.figmgr.casabar=self._new_custombar() 47 self._plotter = None 48 self._inikwg = kwargs 50 49 51 50 self._panelling = None … … 55 54 self._rows = None 56 55 self._cols = None 57 self._autoplot = False58 56 self._minmaxx = None 59 57 self._minmaxy = None … … 76 74 self._panelrows = [] 77 75 self._headtext={'string': None, 'textobj': None} 76 self._colormap = None 77 self._linestyles = None 78 self._legendloc = None 78 79 79 80 def _translate(self, instr): … … 85 86 return None 86 87 87 def _newplotter(self, **kwargs): 88 return new_asaplot(self._visible,**kwargs) 88 def _reload_plotter(self): 89 if self._plotter is not None: 90 self._plotter.clear() 91 if self.casabar_exists(): 92 del self._plotter.figmgr.casabar 93 self._plotter.quit() 94 del self._plotter 95 self._plotter = new_asaplot(self._visible,**self._inikwg) 96 self._plotter.figmgr.casabar=self._new_custombar() 97 # just to make sure they're set 98 self._plotter.palette(color=0,colormap=self._colormap, 99 linestyle=0,linestyles=self._linestyles) 100 self._plotter.legend(self._legendloc) 89 101 90 102 def _new_custombar(self): … … 107 119 return False 108 120 121 def _assert_plotter(self,mode="status",errmsg=None): 122 """ 123 Check asaplot status. Returns True if plot window is alive. 124 Parameters 125 mode: Mode of operation. ['status'|'reload'|'halt'] 126 The mode 'status' simply returns if asaplot is 127 alive (True/False). When asaplot is not alive, 128 asaplot is reloaded when mode='reload', while 129 an error raised when mode='halt' 130 errmsg: An error (warning) message to send to the logger, 131 when asaplot is dead. 132 """ 133 if self._plotter and not self._plotter.is_dead: 134 return True 135 # Plotter is not alive. 136 haltmsg = "Plotter window has not yet been loaded or is closed." 137 if type(errmsg)==str and len(errmsg) > 0: 138 haltmsg = errmsg 139 140 if mode.upper().startswith("R"): 141 # reload plotter 142 self._reload_plotter() 143 return True 144 elif mode.upper().startswith("H"): 145 # halt 146 asaplog.push(haltmsg) 147 asaplog.post("ERROR") 148 raise RuntimeError(haltmsg) 149 else: 150 if errmsg: 151 asaplog.push(errmsg) 152 asaplog.post("WARN") 153 return False 154 155 109 156 @asaplog_post_dec 110 157 def plot(self, scan=None): … … 119 166 are consistent e.g. all 'channel' or all 'velocity' etc. 120 167 """ 168 if not self._data and not scan: 169 msg = "Input is not a scantable" 170 raise TypeError(msg) 121 171 self._startrow = 0 122 172 self._ipanel = -1 123 173 self._reset_header() 124 if self._plotter.is_dead: 125 if self.casabar_exists(): 126 del self._plotter.figmgr.casabar 127 self._plotter = self._newplotter() 128 self._plotter.figmgr.casabar=self._new_custombar() 174 self._panelrows = [] 175 176 self._assert_plotter(mode="reload") 129 177 if self.casabar_exists(): 130 178 self._plotter.figmgr.casabar.set_pagecounter(1) 131 self._panelrows = [] 179 132 180 self._plotter.hold() 133 181 #self._plotter.clear() 134 if not self._data and not scan:135 msg = "Input is not a scantable"136 raise TypeError(msg)137 182 if scan: 138 183 self.set_data(scan, refresh=False) 184 self._plotter.palette(color=0,colormap=self._colormap, 185 linestyle=0,linestyles=self._linestyles) 186 self._plotter.legend(self._legendloc) 187 139 188 self._plot(self._data) 140 189 if self._minmaxy is not None: … … 147 196 148 197 def gca(self): 198 errmsg = "No axis to retun. Need to plot first." 199 if not self._assert_plotter(mode="status",errmsg=errmsg): 200 return None 149 201 return self._plotter.figure.gca() 150 202 151 203 def refresh(self): 152 204 """Do a soft refresh""" 205 errmsg = "No figure to re-plot. Need to plot first." 206 self._assert_plotter(mode="halt",errmsg=errmsg) 207 153 208 self._plotter.figure.show() 154 209 … … 163 218 if different IFs are spread over panels (default 0) 164 219 """ 165 if self._data is None: 220 ## this method relies on already plotted figure 221 if not self._assert_plotter(mode="status") or (self._data is None): 222 msg = "Cannot create mask interactively on plot. Can only create mask after plotting." 223 asaplog.push( msg ) 224 asaplog.post( "ERROR" ) 166 225 return [] 167 226 outmask = [] … … 210 269 # forwards to matplotlib axes 211 270 def text(self, *args, **kwargs): 271 self._assert_plotter(mode="reload") 212 272 if kwargs.has_key("interactive"): 213 273 if kwargs.pop("interactive"): … … 219 279 220 280 def arrow(self, *args, **kwargs): 281 self._assert_plotter(mode="reload") 221 282 if kwargs.has_key("interactive"): 222 283 if kwargs.pop("interactive"): … … 231 292 232 293 def annotate(self, text, xy=None, xytext=None, **kwargs): 294 self._assert_plotter(mode="reload") 233 295 if kwargs.has_key("interactive"): 234 296 if kwargs.pop("interactive"): … … 242 304 243 305 def axvline(self, *args, **kwargs): 306 self._assert_plotter(mode="reload") 244 307 if kwargs.has_key("interactive"): 245 308 if kwargs.pop("interactive"): … … 251 314 252 315 def axhline(self, *args, **kwargs): 316 self._assert_plotter(mode="reload") 253 317 if kwargs.has_key("interactive"): 254 318 if kwargs.pop("interactive"): … … 260 324 261 325 def axvspan(self, *args, **kwargs): 326 self._assert_plotter(mode="reload") 262 327 if kwargs.has_key("interactive"): 263 328 if kwargs.pop("interactive"): … … 274 339 275 340 def axhspan(self, *args, **kwargs): 341 self._assert_plotter(mode="reload") 276 342 if kwargs.has_key("interactive"): 277 343 if kwargs.pop("interactive"): … … 288 354 289 355 def _axes_callback(self, axesfunc, *args, **kwargs): 356 self._assert_plotter(mode="reload") 290 357 panel = 0 291 358 if kwargs.has_key("panel"): … … 504 571 """ 505 572 self._lmap = mp 506 self._plotter.legend(mode) 573 #self._plotter.legend(mode) 574 self._legendloc = mode 507 575 if isinstance(fontsize, int): 508 576 from matplotlib import rc as rcp … … 513 581 def set_title(self, title=None, fontsize=None, refresh=True): 514 582 """ 515 Set the title of the plot. If multiple panels are plotted,583 Set the title of sub-plots. If multiple sub-plots are plotted, 516 584 multiple titles have to be specified. 517 585 Parameters: 586 title: a list of titles of sub-plots. 587 fontsize: a font size of titles (integer) 518 588 refresh: True (default) or False. If True, the plot is 519 589 replotted based on the new parameter setting(s). … … 521 591 Example: 522 592 # two panels are visible on the plotter 523 plotter.set_title([ "First Panel","Second Panel"])593 plotter.set_title(['First Panel','Second Panel']) 524 594 """ 525 595 self._title = title … … 537 607 ordinate: a list of ordinate labels. None (default) let 538 608 data determine the labels 609 fontsize: a font size of vertical axis labels (integer) 539 610 refresh: True (default) or False. If True, the plot is 540 611 replotted based on the new parameter setting(s). … … 542 613 Example: 543 614 # two panels are visible on the plotter 544 plotter.set_ordinate([ "First Y-Axis","Second Y-Axis"])615 plotter.set_ordinate(['First Y-Axis','Second Y-Axis']) 545 616 """ 546 617 self._ordinate = ordinate … … 559 630 abcissa: a list of abcissa labels. None (default) let 560 631 data determine the labels 632 fontsize: a font size of horizontal axis labels (integer) 561 633 refresh: True (default) or False. If True, the plot is 562 634 replotted based on the new parameter setting(s). … … 564 636 Example: 565 637 # two panels are visible on the plotter 566 plotter.set_ordinate([ "First X-Axis","Second X-Axis"])638 plotter.set_ordinate(['First X-Axis','Second X-Axis']) 567 639 """ 568 640 self._abcissa = abcissa … … 584 656 Otherwise,the parameter(s) are set without replotting. 585 657 Example: 586 plotter.set_colors( "red green blue")658 plotter.set_colors('red green blue') 587 659 # If for example four lines are overlaid e.g I Q U V 588 660 # 'I' will be 'red', 'Q' will be 'green', U will be 'blue' 589 661 # and 'V' will be 'red' again. 590 662 """ 591 if isinstance(colmap,str): 592 colmap = colmap.split() 593 self._plotter.palette(0, colormap=colmap) 663 #if isinstance(colmap,str): 664 # colmap = colmap.split() 665 #self._plotter.palette(0, colormap=colmap) 666 self._colormap = colmap 594 667 if refresh and self._data: self.plot(self._data) 595 668 … … 604 677 is taken from the .asaprc setting 605 678 plotter.histogram 679 linewidth: a line width 606 680 refresh: True (default) or False. If True, the plot is 607 681 replotted based on the new parameter setting(s). … … 620 694 only one color has been set. 621 695 Parameters: 622 linestyles:a list of linestyles to use.696 linestyles: a list of linestyles to use. 623 697 'line', 'dashed', 'dotted', 'dashdot', 624 698 'dashdotdot' and 'dashdashdot' are 625 699 possible 700 linewidth: a line width 626 701 refresh: True (default) or False. If True, the plot is 627 702 replotted based on the new parameter setting(s). 628 703 Otherwise,the parameter(s) are set without replotting. 629 704 Example: 630 plotter.set_colors( "black")631 plotter.set_linestyles( "line dashed dotted dashdot")705 plotter.set_colors('black') 706 plotter.set_linestyles('line dashed dotted dashdot') 632 707 # If for example four lines are overlaid e.g I Q U V 633 708 # 'I' will be 'solid', 'Q' will be 'dashed', 634 709 # U will be 'dotted' and 'V' will be 'dashdot'. 635 710 """ 636 if isinstance(linestyles,str): 637 linestyles = linestyles.split() 638 self._plotter.palette(color=0,linestyle=0,linestyles=linestyles) 711 #if isinstance(linestyles,str): 712 # linestyles = linestyles.split() 713 #self._plotter.palette(color=0,linestyle=0,linestyles=linestyles) 714 self._linestyles = linestyles 639 715 if isinstance(linewidth, float) or isinstance(linewidth, int): 640 716 from matplotlib import rc as rcp … … 707 783 If the spectrum is flagged no line will be drawn in that location. 708 784 """ 785 errmsg = "Cannot plot spectral lines. Need to plot scantable first." 786 self._assert_plotter(mode="halt",errmsg=errmsg) 709 787 if not self._data: 710 788 raise RuntimeError("No scantable has been plotted yet.") … … 784 862 dpi: The dpi of the output non-ps plot 785 863 """ 864 errmsg = "Cannot save figure. Need to plot first." 865 self._assert_plotter(mode="halt",errmsg=errmsg) 866 786 867 self._plotter.save(filename,orientation,dpi) 787 868 return … … 791 872 """ 792 873 Set a plotting mask for a specific polarization. 793 This is useful for masking out "noise"Pangle outside a source.874 This is useful for masking out 'noise' Pangle outside a source. 794 875 Parameters: 795 876 mask: a mask from scantable.create_mask … … 800 881 Example: 801 882 select = selector() 802 select.setpolstrings( "Pangle")883 select.setpolstrings('Pangle') 803 884 plotter.set_mask(mymask, select) 804 885 """ … … 1305 1386 @asaplog_post_dec 1306 1387 def plottp(self, scan=None, outfile=None): 1307 if self._plotter.is_dead: 1308 if self.casabar_exists(): 1309 del self._plotter.figmgr.casabar 1310 self._plotter = self._newplotter() 1311 self._plotter.figmgr.casabar=self._new_custombar() 1388 self._assert_plotter(mode="reload") 1312 1389 self._plotter.hold() 1313 1390 self._plotter.clear() … … 1399 1476 See the method help for detailed information. 1400 1477 """ 1478 self._assert_plotter(mode="reload") 1401 1479 self._plotter.text(*args, **kwargs) 1402 1480 # end matplotlib.Figure.text forwarding function … … 1437 1515 1438 1516 if plot: 1517 errmsg = "Can plot header only after the first call to plot()." 1518 self._assert_plotter(mode="halt",errmsg=errmsg) 1439 1519 self._plotter.hold() 1440 1520 self._header_plot(headstr,fontsize=fontsize) … … 1469 1549 asaplog.push("No header has been plotted. Exit without any operation") 1470 1550 asaplog.post("WARN") 1471 el se:1551 elif self._assert_plotter(mode="status"): 1472 1552 self._plotter.hold() 1473 1553 for textobj in self._headtext['textobj']:
Note: See TracChangeset
for help on using the changeset viewer.