Ignore:
File:
1 edited

Legend:

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

    r75313af r9305b46  
    66import logging 
    77import traceback 
     8import math 
     9import os 
     10import operator 
     11import copy 
     12 
    813import wx 
     14import numpy as np 
     15 
    916# Try a normal import first 
    1017# If it fails, try specifying a version 
     
    1522from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg 
    1623from matplotlib.figure import Figure 
    17 import os 
    18 import transform 
    19 #TODO: make the plottables interactive 
    20 from binder import BindArtist 
    2124from matplotlib.font_manager import FontProperties 
    22 DEBUG = False 
    23  
    24 from plottables import Graph 
    25 from TextDialog import TextDialog 
    26 from LabelDialog import LabelDialog 
    27 import operator 
    28  
    29 import math 
    3025import pylab 
    3126DEFAULT_CMAP = pylab.cm.jet 
    32 import copy 
    33 import numpy as np 
    3427 
    3528from sas.sasgui.guiframe.events import StatusEvent 
     29 
     30#TODO: make the plottables interactive 
     31from . import transform 
     32from .TextDialog import TextDialog 
     33from .LabelDialog import LabelDialog 
     34from .binder import BindArtist 
     35from .convert_units import convert_unit 
     36from .plottables import Graph 
    3637from .toolbar import NavigationToolBar, PlotPrintout, bind 
    3738 
     39DEBUG = False 
    3840logger = logging.getLogger(__name__) 
    3941 
     
    4446        for a in obj.get_children(): show_tree(a, d + 1) 
    4547 
    46 from convert_units import convert_unit 
    4748 
    4849 
     
    116117        self.figure = Figure(None, dpi, linewidth=2.0) 
    117118        self.color = '#b3b3b3' 
    118         from canvas import FigureCanvas 
     119        from .canvas import FigureCanvas 
    119120        self.canvas = FigureCanvas(self, -1, self.figure) 
    120121        self.SetColor(color) 
     
    338339        # On Windows platform, default window size is incorrect, so set 
    339340        # toolbar width to figure width. 
    340         tw, th = self.toolbar.GetSizeTuple() 
    341         fw, fh = self.canvas.GetSizeTuple() 
     341        tw, th = self.toolbar.GetSize() 
     342        fw, fh = self.canvas.GetSize() 
    342343        # By adding toolbar in sizer, we are able to put it at the bottom 
    343344        # of the frame - so appearance is closer to GTK version. 
     
    438439            y = hi_y 
    439440        # Move the legend from its previous location by that same amount 
    440         loc_in_canvas = self.legend_x - mouse_diff_x, \ 
    441                         self.legend_y - mouse_diff_y 
     441        loc_in_canvas = (self.legend_x - mouse_diff_x, 
     442                         self.legend_y - mouse_diff_y) 
    442443        # Transform into legend coordinate system 
    443444        trans_axes = self.legend.parent.transAxes.inverted() 
     
    629630        Return values and labels used by Fit Dialog 
    630631        """ 
    631         return self.xLabel, self.yLabel, self.Avalue, self.Bvalue, \ 
    632                 self.ErrAvalue, self.ErrBvalue, self.Chivalue 
     632        return (self.xLabel, self.yLabel, self.Avalue, self.Bvalue, 
     633                self.ErrAvalue, self.ErrBvalue, self.Chivalue) 
    633634 
    634635    def setTrans(self, xtrans, ytrans): 
     
    657658        else: 
    658659            plot_dict = plotlist 
    659         from fitDialog import LinearFit 
     660        from .fitDialog import LinearFit 
    660661 
    661662        if len(plot_dict.keys()) > 0: 
    662             first_item = plot_dict.keys()[0] 
     663            first_item = list(plot_dict.keys())[0] 
    663664            dlg = LinearFit(parent=None, plottable=first_item, 
    664665                            push_data=self.onFitDisplay, 
     
    666667                            title='Linear Fit') 
    667668 
    668             if (self.xmin != 0.0)and (self.xmax != 0.0)\ 
    669                 and(self.xminView != 0.0)and (self.xmaxView != 0.0): 
     669            if ((self.xmin != 0.0) and (self.xmax != 0.0) 
     670                    and (self.xminView != 0.0) and (self.xmaxView != 0.0)): 
    670671                dlg.setFitRange(self.xminView, self.xmaxView, 
    671672                                self.xmin, self.xmax) 
     
    703704 
    704705        """ 
    705         from fitDialog import LinearFit 
     706        from .fitDialog import LinearFit 
    706707        if self._fit_dialog is not None: 
    707708            return 
     
    736737            first_item = plot_list.keys()[0] 
    737738            if first_item.x != []: 
    738                 from PropertyDialog import Properties 
     739                from .PropertyDialog import Properties 
    739740                dial = Properties(self, -1, 'Properties') 
    740741                dial.setValues(self.prevXtrans, self.prevYtrans, self.viewModel) 
     
    924925        except: 
    925926            # toolbar event 
    926             pos_x, pos_y = self.toolbar.GetPositionTuple() 
     927            pos_x, pos_y = self.toolbar.GetPosition() 
    927928            pos = (pos_x, pos_y + 5) 
    928929 
     
    10011002        Remove legend for ax or the current axes. 
    10021003        """ 
    1003         from pylab import gca 
    10041004        if ax is None: 
    1005             ax = gca() 
     1005            ax = pylab.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, \ 
    1062                      is_ok, is_tick = self._on_axis_label(axis='x') 
     1061        xaxis_label, xaxis_unit, xaxis_font, xaxis_color, is_ok, is_tick \ 
     1062            = 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, \ 
    1109                         is_ok, is_tick = self._on_axis_label(axis='y') 
     1108        yaxis_label, yaxis_unit, yaxis_font, yaxis_color, is_ok, is_tick \ 
     1109            = 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 label_temp.count("\%s" % "\\") > 0: 
     1158                if r"\\" in label_temp: 
     1159                    label = label_temp.replace(r"\\", r"??") 
    11591160                    if self.parent is not None: 
    1160                         msg = "Add Label: Error. Can not use double '\\' " 
     1161                        msg = r"Add Label error: Can not use double '\\' " 
    11611162                        msg += "characters..." 
    11621163                        wx.PostEvent(self.parent, StatusEvent(status=msg)) 
     
    12341235        # TODO: rather than redrawing on the fly. 
    12351236        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() \ 
    1648                 or weights is None: 
     1646        if (image is None or np.ndim(image) != 2 
     1647                or np.isfinite(image).all() or weights is None): 
    16491648            return image 
    16501649        # Get bin size in y and x directions 
     
    16761675                    # go 4 next nearest neighbors when no non-zero 
    16771676                    # neighbor exists 
    1678                     if n_y != 0 and n_x != 0 and \ 
    1679                             np.isfinite(image[n_y - 1][n_x - 1]): 
     1677                    if (n_y != 0 and n_x != 0 
     1678                            and np.isfinite(image[n_y - 1][n_x - 1])): 
    16801679                        temp_image[n_y][n_x] += image[n_y - 1][n_x - 1] 
    16811680                        weit[n_y][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]): 
     1681                    if (n_y != len_y - 1 and n_x != 0 
     1682                            and np.isfinite(image[n_y + 1][n_x - 1])): 
    16841683                        temp_image[n_y][n_x] += image[n_y + 1][n_x - 1] 
    16851684                        weit[n_y][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]): 
     1685                    if (n_y != len_y and n_x != len_x - 1 
     1686                            and np.isfinite(image[n_y - 1][n_x + 1])): 
    16881687                        temp_image[n_y][n_x] += image[n_y - 1][n_x + 1] 
    16891688                        weit[n_y][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]): 
     1689                    if (n_y != len_y - 1 and n_x != len_x - 1 
     1690                            and np.isfinite(image[n_y + 1][n_x + 1])): 
    16921691                        temp_image[n_y][n_x] += image[n_y + 1][n_x + 1] 
    16931692                        weit[n_y][n_x] += 1 
     
    17441743            self.graph.delete(self.fit_result) 
    17451744            if hasattr(self, 'plots'): 
    1746                 if 'fit' in self.plots.keys(): 
     1745                if 'fit' in self.plots: 
    17471746                    del self.plots['fit'] 
    17481747        self.ly = None 
     
    17841783                item.transformX(transform.toX2, transform.errToX2) 
    17851784                xunits = convert_unit(2, xunits) 
    1786                 self.graph._xaxis_transformed("%s^{2}" % xname, "%s" % xunits) 
     1785                self.graph._xaxis_transformed("%s^2" % xname, "%s" % xunits) 
    17871786            if self.xLabel == "x^(4)": 
    17881787                item.transformX(transform.toX4, transform.errToX4) 
    17891788                xunits = convert_unit(4, xunits) 
    1790                 self.graph._xaxis_transformed("%s^{4}" % xname, "%s" % xunits) 
     1789                self.graph._xaxis_transformed("%s^4" % xname, "%s" % xunits) 
    17911790            if self.xLabel == "ln(x)": 
    17921791                item.transformX(transform.toLogX, transform.errToLogX) 
    1793                 self.graph._xaxis_transformed("\ln{(%s)}" % xname, "%s" % xunits) 
     1792                self.graph._xaxis_transformed(r"\ln(%s)" % xname, "%s" % xunits) 
    17941793            if self.xLabel == "log10(x)": 
    17951794                item.transformX(transform.toX_pos, transform.errToX_pos) 
     
    17991798                item.transformX(transform.toX4, transform.errToX4) 
    18001799                xunits = convert_unit(4, xunits) 
    1801                 self.graph._xaxis_transformed("%s^{4}" % xname, "%s" % xunits) 
     1800                self.graph._xaxis_transformed("%s^4" % xname, "%s" % xunits) 
    18021801                _xscale = 'log' 
    18031802            if self.yLabel == "ln(y)": 
    18041803                item.transformY(transform.toLogX, transform.errToLogX) 
    1805                 self.graph._yaxis_transformed("\ln{(%s)}" % yname, "%s" % yunits) 
     1804                self.graph._yaxis_transformed(r"\ln(%s)" % yname, "%s" % yunits) 
    18061805            if self.yLabel == "y": 
    18071806                item.transformY(transform.toX, transform.errToX) 
     
    18221821                item.transformY(transform.toYX2, transform.errToYX2) 
    18231822                xunits = convert_unit(2, self.xaxis_unit) 
    1824                 self.graph._yaxis_transformed("%s \ \ %s^{2}" % (yname, xname), 
     1823                self.graph._yaxis_transformed(r"%s \ \ %s^2" % (yname, xname), 
    18251824                                              "%s%s" % (yunits, xunits)) 
    18261825            if self.yLabel == "y*x^(4)": 
    18271826                item.transformY(transform.toYX4, transform.errToYX4) 
    18281827                xunits = convert_unit(4, self.xaxis_unit) 
    1829                 self.graph._yaxis_transformed("%s \ \ %s^{4}" % (yname, xname), 
     1828                self.graph._yaxis_transformed(r"%s \ \ %s^4" % (yname, xname), 
    18301829                                              "%s%s" % (yunits, xunits)) 
    18311830            if self.yLabel == "1/sqrt(y)": 
     
    18331832                                transform.errOneOverSqrtX) 
    18341833                yunits = convert_unit(-0.5, yunits) 
    1835                 self.graph._yaxis_transformed("1/\sqrt{%s}" % yname, 
     1834                self.graph._yaxis_transformed(r"1/\sqrt{%s}" % yname, 
    18361835                                              "%s" % yunits) 
    18371836            if self.yLabel == "ln(y*x)": 
    18381837                item.transformY(transform.toLogXY, transform.errToLogXY) 
    1839                 self.graph._yaxis_transformed("\ln{(%s \ \ %s)}" % (yname, xname), 
     1838                self.graph._yaxis_transformed(r"\ln(%s \ \ %s)" % (yname, xname), 
    18401839                                              "%s%s" % (yunits, self.xaxis_unit)) 
    18411840            if self.yLabel == "ln(y*x^(2))": 
    18421841                item.transformY(transform.toLogYX2, transform.errToLogYX2) 
    18431842                xunits = convert_unit(2, self.xaxis_unit) 
    1844                 self.graph._yaxis_transformed("\ln (%s \ \ %s^{2})" % (yname, xname), 
     1843                self.graph._yaxis_transformed(r"\ln(%s \ \ %s^2)" % (yname, xname), 
    18451844                                              "%s%s" % (yunits, xunits)) 
    18461845            if self.yLabel == "ln(y*x^(4))": 
    18471846                item.transformY(transform.toLogYX4, transform.errToLogYX4) 
    18481847                xunits = convert_unit(4, self.xaxis_unit) 
    1849                 self.graph._yaxis_transformed("\ln (%s \ \ %s^{4})" % (yname, xname), 
     1848                self.graph._yaxis_transformed(r"\ln(%s \ \ %s^4)" % (yname, xname), 
    18501849                                              "%s%s" % (yunits, xunits)) 
    18511850            if self.yLabel == "log10(y*x^(4))": 
     
    18531852                xunits = convert_unit(4, self.xaxis_unit) 
    18541853                _yscale = 'log' 
    1855                 self.graph._yaxis_transformed("%s \ \ %s^{4}" % (yname, xname), 
     1854                self.graph._yaxis_transformed(r"%s \ \ %s^4" % (yname, xname), 
    18561855                                              "%s%s" % (yunits, xunits)) 
    18571856            item.transformView() 
     
    18971896        # Saving value to redisplay in Fit Dialog when it is opened again 
    18981897        self.Avalue, self.Bvalue, self.ErrAvalue, \ 
    1899                       self.ErrBvalue, self.Chivalue = func 
     1898            self.ErrBvalue, self.Chivalue = func 
    19001899        self.xminView = xminView 
    19011900        self.xmaxView = xmaxView 
Note: See TracChangeset for help on using the changeset viewer.