Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/sas/sasgui/plottools/PlotPanel.py

    r9305b46 r75313af  
    66import logging 
    77import traceback 
    8 import math 
    9 import os 
    10 import operator 
    11 import copy 
    12  
    138import wx 
    14 import numpy as np 
    15  
    169# Try a normal import first 
    1710# If it fails, try specifying a version 
     
    2215from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg 
    2316from matplotlib.figure import Figure 
     17import os 
     18import transform 
     19#TODO: make the plottables interactive 
     20from binder import BindArtist 
    2421from matplotlib.font_manager import FontProperties 
     22DEBUG = False 
     23 
     24from plottables import Graph 
     25from TextDialog import TextDialog 
     26from LabelDialog import LabelDialog 
     27import operator 
     28 
     29import math 
    2530import pylab 
    2631DEFAULT_CMAP = pylab.cm.jet 
     32import copy 
     33import numpy as np 
    2734 
    2835from sas.sasgui.guiframe.events import StatusEvent 
    29  
    30 #TODO: make the plottables interactive 
    31 from . import transform 
    32 from .TextDialog import TextDialog 
    33 from .LabelDialog import LabelDialog 
    34 from .binder import BindArtist 
    35 from .convert_units import convert_unit 
    36 from .plottables import Graph 
    3736from .toolbar import NavigationToolBar, PlotPrintout, bind 
    3837 
    39 DEBUG = False 
    4038logger = logging.getLogger(__name__) 
    4139 
     
    4644        for a in obj.get_children(): show_tree(a, d + 1) 
    4745 
     46from convert_units import convert_unit 
    4847 
    4948 
     
    117116        self.figure = Figure(None, dpi, linewidth=2.0) 
    118117        self.color = '#b3b3b3' 
    119         from .canvas import FigureCanvas 
     118        from canvas import FigureCanvas 
    120119        self.canvas = FigureCanvas(self, -1, self.figure) 
    121120        self.SetColor(color) 
     
    339338        # On Windows platform, default window size is incorrect, so set 
    340339        # toolbar width to figure width. 
    341         tw, th = self.toolbar.GetSize() 
    342         fw, fh = self.canvas.GetSize() 
     340        tw, th = self.toolbar.GetSizeTuple() 
     341        fw, fh = self.canvas.GetSizeTuple() 
    343342        # By adding toolbar in sizer, we are able to put it at the bottom 
    344343        # of the frame - so appearance is closer to GTK version. 
     
    439438            y = hi_y 
    440439        # Move the legend from its previous location by that same amount 
    441         loc_in_canvas = (self.legend_x - mouse_diff_x, 
    442                          self.legend_y - mouse_diff_y) 
     440        loc_in_canvas = self.legend_x - mouse_diff_x, \ 
     441                        self.legend_y - mouse_diff_y 
    443442        # Transform into legend coordinate system 
    444443        trans_axes = self.legend.parent.transAxes.inverted() 
     
    630629        Return values and labels used by Fit Dialog 
    631630        """ 
    632         return (self.xLabel, self.yLabel, self.Avalue, self.Bvalue, 
    633                 self.ErrAvalue, self.ErrBvalue, self.Chivalue) 
     631        return self.xLabel, self.yLabel, self.Avalue, self.Bvalue, \ 
     632                self.ErrAvalue, self.ErrBvalue, self.Chivalue 
    634633 
    635634    def setTrans(self, xtrans, ytrans): 
     
    658657        else: 
    659658            plot_dict = plotlist 
    660         from .fitDialog import LinearFit 
     659        from fitDialog import LinearFit 
    661660 
    662661        if len(plot_dict.keys()) > 0: 
    663             first_item = list(plot_dict.keys())[0] 
     662            first_item = plot_dict.keys()[0] 
    664663            dlg = LinearFit(parent=None, plottable=first_item, 
    665664                            push_data=self.onFitDisplay, 
     
    667666                            title='Linear Fit') 
    668667 
    669             if ((self.xmin != 0.0) and (self.xmax != 0.0) 
    670                     and (self.xminView != 0.0) and (self.xmaxView != 0.0)): 
     668            if (self.xmin != 0.0)and (self.xmax != 0.0)\ 
     669                and(self.xminView != 0.0)and (self.xmaxView != 0.0): 
    671670                dlg.setFitRange(self.xminView, self.xmaxView, 
    672671                                self.xmin, self.xmax) 
     
    704703 
    705704        """ 
    706         from .fitDialog import LinearFit 
     705        from fitDialog import LinearFit 
    707706        if self._fit_dialog is not None: 
    708707            return 
     
    737736            first_item = plot_list.keys()[0] 
    738737            if first_item.x != []: 
    739                 from .PropertyDialog import Properties 
     738                from PropertyDialog import Properties 
    740739                dial = Properties(self, -1, 'Properties') 
    741740                dial.setValues(self.prevXtrans, self.prevYtrans, self.viewModel) 
     
    925924        except: 
    926925            # toolbar event 
    927             pos_x, pos_y = self.toolbar.GetPosition() 
     926            pos_x, pos_y = self.toolbar.GetPositionTuple() 
    928927            pos = (pos_x, pos_y + 5) 
    929928 
     
    10021001        Remove legend for ax or the current axes. 
    10031002        """ 
     1003        from pylab import gca 
    10041004        if ax is None: 
    1005             ax = pylab.gca() 
     1005            ax = gca() 
    10061006        ax.legend_ = None 
    10071007 
     
    10591059        Allows you to add text to the plot 
    10601060        """ 
    1061         xaxis_label, xaxis_unit, xaxis_font, xaxis_color, is_ok, is_tick \ 
    1062             = self._on_axis_label(axis='x') 
     1061        xaxis_label, xaxis_unit, xaxis_font, xaxis_color, \ 
     1062                     is_ok, is_tick = self._on_axis_label(axis='x') 
    10631063        if not is_ok: 
    10641064            return 
     
    10731073        if self.data is not None: 
    10741074            # 2D 
    1075             self.xaxis(self.xaxis_label, self.xaxis_unit, 
    1076                        self.xaxis_font, self.xaxis_color, self.xaxis_tick) 
     1075            self.xaxis(self.xaxis_label, self.xaxis_unit, \ 
     1076                        self.xaxis_font, self.xaxis_color, self.xaxis_tick) 
    10771077            self.subplot.figure.canvas.draw_idle() 
    10781078        else: 
     
    11061106        Allows you to add text to the plot 
    11071107        """ 
    1108         yaxis_label, yaxis_unit, yaxis_font, yaxis_color, is_ok, is_tick \ 
    1109             = self._on_axis_label(axis='y') 
     1108        yaxis_label, yaxis_unit, yaxis_font, yaxis_color, \ 
     1109                        is_ok, is_tick = self._on_axis_label(axis='y') 
    11101110        if not is_ok: 
    11111111            return 
     
    11201120        if self.data is not None: 
    11211121            # 2D 
    1122             self.yaxis(self.yaxis_label, self.yaxis_unit, 
     1122            self.yaxis(self.yaxis_label, self.yaxis_unit, \ 
    11231123                        self.yaxis_font, self.yaxis_color, self.yaxis_tick) 
    11241124            self.subplot.figure.canvas.draw_idle() 
     
    11561156                is_tick = textdial.getTickLabel() 
    11571157                label_temp = textdial.getText() 
    1158                 if r"\\" in label_temp: 
    1159                     label = label_temp.replace(r"\\", r"??") 
     1158                if label_temp.count("\%s" % "\\") > 0: 
    11601159                    if self.parent is not None: 
    1161                         msg = r"Add Label error: Can not use double '\\' " 
     1160                        msg = "Add Label: Error. Can not use double '\\' " 
    11621161                        msg += "characters..." 
    11631162                        wx.PostEvent(self.parent, StatusEvent(status=msg)) 
     
    12351234        # TODO: rather than redrawing on the fly. 
    12361235        self.subplot.clear() 
     1236        self.subplot.hold(True) 
    12371237 
    12381238    def render(self): 
     
    13271327        if id is None: 
    13281328            id = name 
    1329         from .plottable_interactor import PointInteractor 
     1329        from plottable_interactor import PointInteractor 
    13301330        p = PointInteractor(self, self.subplot, zorder=zorder, id=id) 
    13311331        if p.markersize is not None: 
     
    13441344        if id is None: 
    13451345            id = name 
    1346         from .plottable_interactor import PointInteractor 
     1346        from plottable_interactor import PointInteractor 
    13471347        p = PointInteractor(self, self.subplot, zorder=zorder, id=id) 
    13481348        p.curve(x, y, dy=dy, color=color, symbol=symbol, zorder=zorder, 
     
    15331533        """ 
    15341534        # No qx or qy given in a vector format 
    1535         if (self.qx_data is None or self.qy_data is None 
    1536                 or self.qx_data.ndim != 1 or self.qy_data.ndim != 1): 
     1535        if self.qx_data is None or self.qy_data is None \ 
     1536                or self.qx_data.ndim != 1 or self.qy_data.ndim != 1: 
    15371537            # do we need deepcopy here? 
    15381538            return copy.deepcopy(self.data) 
     
    15931593        """ 
    15941594        # No qx or qy given in a vector format 
    1595         if (self.qx_data is None or self.qy_data is None 
    1596                 or self.qx_data.ndim != 1 or self.qy_data.ndim != 1): 
     1595        if self.qx_data is None or self.qy_data is None \ 
     1596                or self.qx_data.ndim != 1 or self.qy_data.ndim != 1: 
    15971597            # do we need deepcopy here? 
    15981598            return copy.deepcopy(self.data) 
     
    16441644        """ 
    16451645        # No image matrix given 
    1646         if (image is None or np.ndim(image) != 2 
    1647                 or np.isfinite(image).all() or weights is None): 
     1646        if image is None or np.ndim(image) != 2 \ 
     1647                or np.isfinite(image).all() \ 
     1648                or weights is None: 
    16481649            return image 
    16491650        # Get bin size in y and x directions 
     
    16751676                    # go 4 next nearest neighbors when no non-zero 
    16761677                    # neighbor exists 
    1677                     if (n_y != 0 and n_x != 0 
    1678                             and np.isfinite(image[n_y - 1][n_x - 1])): 
     1678                    if n_y != 0 and n_x != 0 and \ 
     1679                            np.isfinite(image[n_y - 1][n_x - 1]): 
    16791680                        temp_image[n_y][n_x] += image[n_y - 1][n_x - 1] 
    16801681                        weit[n_y][n_x] += 1 
    1681                     if (n_y != len_y - 1 and n_x != 0 
    1682                             and np.isfinite(image[n_y + 1][n_x - 1])): 
     1682                    if n_y != len_y - 1 and n_x != 0 and \ 
     1683                            np.isfinite(image[n_y + 1][n_x - 1]): 
    16831684                        temp_image[n_y][n_x] += image[n_y + 1][n_x - 1] 
    16841685                        weit[n_y][n_x] += 1 
    1685                     if (n_y != len_y and n_x != len_x - 1 
    1686                             and np.isfinite(image[n_y - 1][n_x + 1])): 
     1686                    if n_y != len_y and n_x != len_x - 1 and \ 
     1687                            np.isfinite(image[n_y - 1][n_x + 1]): 
    16871688                        temp_image[n_y][n_x] += image[n_y - 1][n_x + 1] 
    16881689                        weit[n_y][n_x] += 1 
    1689                     if (n_y != len_y - 1 and n_x != len_x - 1 
    1690                             and np.isfinite(image[n_y + 1][n_x + 1])): 
     1690                    if n_y != len_y - 1 and n_x != len_x - 1 and \ 
     1691                            np.isfinite(image[n_y + 1][n_x + 1]): 
    16911692                        temp_image[n_y][n_x] += image[n_y + 1][n_x + 1] 
    16921693                        weit[n_y][n_x] += 1 
     
    17431744            self.graph.delete(self.fit_result) 
    17441745            if hasattr(self, 'plots'): 
    1745                 if 'fit' in self.plots: 
     1746                if 'fit' in self.plots.keys(): 
    17461747                    del self.plots['fit'] 
    17471748        self.ly = None 
     
    17831784                item.transformX(transform.toX2, transform.errToX2) 
    17841785                xunits = convert_unit(2, xunits) 
    1785                 self.graph._xaxis_transformed("%s^2" % xname, "%s" % xunits) 
     1786                self.graph._xaxis_transformed("%s^{2}" % xname, "%s" % xunits) 
    17861787            if self.xLabel == "x^(4)": 
    17871788                item.transformX(transform.toX4, transform.errToX4) 
    17881789                xunits = convert_unit(4, xunits) 
    1789                 self.graph._xaxis_transformed("%s^4" % xname, "%s" % xunits) 
     1790                self.graph._xaxis_transformed("%s^{4}" % xname, "%s" % xunits) 
    17901791            if self.xLabel == "ln(x)": 
    17911792                item.transformX(transform.toLogX, transform.errToLogX) 
    1792                 self.graph._xaxis_transformed(r"\ln(%s)" % xname, "%s" % xunits) 
     1793                self.graph._xaxis_transformed("\ln{(%s)}" % xname, "%s" % xunits) 
    17931794            if self.xLabel == "log10(x)": 
    17941795                item.transformX(transform.toX_pos, transform.errToX_pos) 
     
    17981799                item.transformX(transform.toX4, transform.errToX4) 
    17991800                xunits = convert_unit(4, xunits) 
    1800                 self.graph._xaxis_transformed("%s^4" % xname, "%s" % xunits) 
     1801                self.graph._xaxis_transformed("%s^{4}" % xname, "%s" % xunits) 
    18011802                _xscale = 'log' 
    18021803            if self.yLabel == "ln(y)": 
    18031804                item.transformY(transform.toLogX, transform.errToLogX) 
    1804                 self.graph._yaxis_transformed(r"\ln(%s)" % yname, "%s" % yunits) 
     1805                self.graph._yaxis_transformed("\ln{(%s)}" % yname, "%s" % yunits) 
    18051806            if self.yLabel == "y": 
    18061807                item.transformY(transform.toX, transform.errToX) 
     
    18211822                item.transformY(transform.toYX2, transform.errToYX2) 
    18221823                xunits = convert_unit(2, self.xaxis_unit) 
    1823                 self.graph._yaxis_transformed(r"%s \ \ %s^2" % (yname, xname), 
     1824                self.graph._yaxis_transformed("%s \ \ %s^{2}" % (yname, xname), 
    18241825                                              "%s%s" % (yunits, xunits)) 
    18251826            if self.yLabel == "y*x^(4)": 
    18261827                item.transformY(transform.toYX4, transform.errToYX4) 
    18271828                xunits = convert_unit(4, self.xaxis_unit) 
    1828                 self.graph._yaxis_transformed(r"%s \ \ %s^4" % (yname, xname), 
     1829                self.graph._yaxis_transformed("%s \ \ %s^{4}" % (yname, xname), 
    18291830                                              "%s%s" % (yunits, xunits)) 
    18301831            if self.yLabel == "1/sqrt(y)": 
     
    18321833                                transform.errOneOverSqrtX) 
    18331834                yunits = convert_unit(-0.5, yunits) 
    1834                 self.graph._yaxis_transformed(r"1/\sqrt{%s}" % yname, 
     1835                self.graph._yaxis_transformed("1/\sqrt{%s}" % yname, 
    18351836                                              "%s" % yunits) 
    18361837            if self.yLabel == "ln(y*x)": 
    18371838                item.transformY(transform.toLogXY, transform.errToLogXY) 
    1838                 self.graph._yaxis_transformed(r"\ln(%s \ \ %s)" % (yname, xname), 
     1839                self.graph._yaxis_transformed("\ln{(%s \ \ %s)}" % (yname, xname), 
    18391840                                              "%s%s" % (yunits, self.xaxis_unit)) 
    18401841            if self.yLabel == "ln(y*x^(2))": 
    18411842                item.transformY(transform.toLogYX2, transform.errToLogYX2) 
    18421843                xunits = convert_unit(2, self.xaxis_unit) 
    1843                 self.graph._yaxis_transformed(r"\ln(%s \ \ %s^2)" % (yname, xname), 
     1844                self.graph._yaxis_transformed("\ln (%s \ \ %s^{2})" % (yname, xname), 
    18441845                                              "%s%s" % (yunits, xunits)) 
    18451846            if self.yLabel == "ln(y*x^(4))": 
    18461847                item.transformY(transform.toLogYX4, transform.errToLogYX4) 
    18471848                xunits = convert_unit(4, self.xaxis_unit) 
    1848                 self.graph._yaxis_transformed(r"\ln(%s \ \ %s^4)" % (yname, xname), 
     1849                self.graph._yaxis_transformed("\ln (%s \ \ %s^{4})" % (yname, xname), 
    18491850                                              "%s%s" % (yunits, xunits)) 
    18501851            if self.yLabel == "log10(y*x^(4))": 
     
    18521853                xunits = convert_unit(4, self.xaxis_unit) 
    18531854                _yscale = 'log' 
    1854                 self.graph._yaxis_transformed(r"%s \ \ %s^4" % (yname, xname), 
     1855                self.graph._yaxis_transformed("%s \ \ %s^{4}" % (yname, xname), 
    18551856                                              "%s%s" % (yunits, xunits)) 
    18561857            item.transformView() 
     
    18961897        # Saving value to redisplay in Fit Dialog when it is opened again 
    18971898        self.Avalue, self.Bvalue, self.ErrAvalue, \ 
    1898             self.ErrBvalue, self.Chivalue = func 
     1899                      self.ErrBvalue, self.Chivalue = func 
    18991900        self.xminView = xminView 
    19001901        self.xmaxView = xmaxView 
Note: See TracChangeset for help on using the changeset viewer.