Revision: 8488
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8488&view=rev
Author:   efiring
Date:     2010-07-02 22:44:27 +0000 (Fri, 02 Jul 2010)

Log Message:
-----------
tick_params works with existing ticks instead of starting with new ones

Modified Paths:
--------------
    trunk/matplotlib/examples/pylab_examples/multiple_yaxis_with_spines.py
    trunk/matplotlib/lib/matplotlib/axis.py
    trunk/matplotlib/lib/matplotlib/projections/geo.py
    trunk/matplotlib/lib/matplotlib/projections/polar.py

Modified: trunk/matplotlib/examples/pylab_examples/multiple_yaxis_with_spines.py
===================================================================
--- trunk/matplotlib/examples/pylab_examples/multiple_yaxis_with_spines.py      
2010-07-02 19:03:05 UTC (rev 8487)
+++ trunk/matplotlib/examples/pylab_examples/multiple_yaxis_with_spines.py      
2010-07-02 22:44:27 UTC (rev 8488)
@@ -54,8 +54,13 @@
     par1.yaxis.label.set_color(p2.get_color())
     par2.yaxis.label.set_color(p3.get_color())
 
+    tkw = dict(size=4, width=1.5)
+    host.tick_params(axis='y', colors=p1.get_color(), **tkw)
+    par1.tick_params(axis='y', colors=p2.get_color(), **tkw)
+    par2.tick_params(axis='y', colors=p3.get_color(), **tkw)
+    host.tick_params(axis='x', **tkw)
+
     lines = [p1, p2, p3]
     host.legend(lines, [l.get_label() for l in lines])
-    plt.draw()
     plt.show()
 

Modified: trunk/matplotlib/lib/matplotlib/axis.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/axis.py     2010-07-02 19:03:05 UTC (rev 
8487)
+++ trunk/matplotlib/lib/matplotlib/axis.py     2010-07-02 22:44:27 UTC (rev 
8488)
@@ -84,7 +84,8 @@
         """
         artist.Artist.__init__(self)
 
-        if gridOn is None: gridOn = rcParams['axes.grid']
+        if gridOn is None:
+            gridOn = rcParams['axes.grid']
 
         self.set_figure(axes.figure)
         self.axes = axes
@@ -148,18 +149,11 @@
         self.update_position(loc)
 
     def apply_tickdir(self, tickdir):
-        if tickdir is None:
-            tickdir = rcParams['%s.direction' % self._name]
-        self._tickdir = tickdir
+        """
+        Calculate self._pad and self._tickmarkers
+        """
+        pass
 
-        if self._tickdir == 'in':
-            self._xtickmarkers = (mlines.TICKUP, mlines.TICKDOWN)
-            self._ytickmarkers = (mlines.TICKRIGHT, mlines.TICKLEFT)
-            self._pad = self._base_pad
-        else:
-            self._xtickmarkers = (mlines.TICKDOWN, mlines.TICKUP)
-            self._ytickmarkers = (mlines.TICKLEFT, mlines.TICKRIGHT)
-            self._pad = self._base_pad + self._size
 
     def get_children(self):
         children = [self.tick1line, self.tick2line, self.gridline, 
self.label1, self.label2]
@@ -271,20 +265,81 @@
     def set_view_interval(self, vmin, vmax, ignore=False):
         raise NotImplementedError('Derived must override')
 
+    def _apply_params(self, **kw):
+        switchkw = ['gridOn', 'tick1On', 'tick2On', 'label1On', 'label2On']
+        switches = [k for k in kw if k in switchkw]
+        for k in switches:
+            setattr(self, k, kw.pop(k))
+        dirpad = [k for k in kw if k in ['pad', 'tickdir']]
+        if dirpad:
+            self._base_pad = kw.pop('pad', self._base_pad)
+            self.apply_tickdir(kw.pop('tickdir', self._tickdir))
+            trans = self._get_text1_transform()[0]
+            self.label1.set_transform(trans)
+            trans = self._get_text2_transform()[0]
+            self.label2.set_transform(trans)
+            self.tick1line.set_marker(self._tickmarkers[0])
+            self.tick2line.set_marker(self._tickmarkers[1])
+        tick_kw = dict([kv for kv in kw.items()
+                             if kv[0] in ['color', 'zorder']])
+        if tick_kw:
+            self.tick1line.set(**tick_kw)
+            self.tick2line.set(**tick_kw)
+            for k, v in tick_kw.items():
+                setattr(self, '_'+k, v)
+        tick_list = [kv for kv in kw.items() if kv[0] in ['size', 'width']]
+        for k, v in tick_list:
+            setattr(self, '_'+k, v)
+            if k == 'size':
+                self.tick1line.set_markersize(v)
+                self.tick2line.set_markersize(v)
+            else:
+                self.tick1line.set_markeredgewidth(v)
+                self.tick2line.set_markeredgewidth(v)
+        label_list = [k for k in kw.items()
+                                if k[0] in ['labelsize', 'labelcolor']]
+        if label_list:
+            label_kw = dict([(k[5:], v) for (k, v) in label_list])
+            self.label1.set(**label_kw)
+            self.label2.set(**label_kw)
+            for k, v in label_kw.items():
+                setattr(self, '_'+k, v)
 
+
+
 class XTick(Tick):
     """
     Contains all the Artists needed to make an x tick - the tick line,
     the label text and the grid line
     """
     __name__ = 'xtick'
+
+    def _get_text1_transform(self):
+        return self.axes.get_xaxis_text1_transform(self._pad)
+
+    def _get_text2_transform(self):
+        return self.axes.get_xaxis_text2_transform(self._pad)
+
+    def apply_tickdir(self, tickdir):
+        if tickdir is None:
+            tickdir = rcParams['%s.direction' % self._name]
+        self._tickdir = tickdir
+
+        if self._tickdir == 'in':
+            self._tickmarkers = (mlines.TICKUP, mlines.TICKDOWN)
+            self._pad = self._base_pad
+        else:
+            self._tickmarkers = (mlines.TICKDOWN, mlines.TICKUP)
+            self._pad = self._base_pad + self._size
+
+
     def _get_text1(self):
         'Get the default Text instance'
         # the y loc is 3 points below the min of y axis
         # get the affine as an a,b,c,d,tx,ty list
         # x in data coords, y in axes coords
         #t =  mtext.Text(
-        trans, vert, horiz = self.axes.get_xaxis_text1_transform(self._pad)
+        trans, vert, horiz = self._get_text1_transform()
         t = mtext.Text(
             x=0, y=0,
             fontproperties=font_manager.FontProperties(size=self._labelsize),
@@ -302,7 +357,7 @@
         'Get the default Text 2 instance'
         # x in data coords, y in axes coords
         #t =  mtext.Text(
-        trans, vert, horiz = self.axes.get_xaxis_text2_transform(self._pad)
+        trans, vert, horiz = self._get_text2_transform()
         t = mtext.Text(
             x=0, y=1,
             fontproperties=font_manager.FontProperties(size=self._labelsize),
@@ -320,7 +375,7 @@
         l = mlines.Line2D(xdata=(0,), ydata=(0,),
                    color=self._color,
                    linestyle = 'None',
-                   marker = self._xtickmarkers[0],
+                   marker = self._tickmarkers[0],
                    markersize=self._size,
                    markeredgewidth=self._width,
                    zorder=self._zorder,
@@ -335,7 +390,7 @@
         l = mlines.Line2D( xdata=(0,), ydata=(1,),
                        color=self._color,
                        linestyle = 'None',
-                       marker = self._xtickmarkers[1],
+                       marker = self._tickmarkers[1],
                        markersize=self._size,
                        markeredgewidth=self._width,
                        zorder=self._zorder,
@@ -412,11 +467,30 @@
     """
     __name__ = 'ytick'
 
+    def _get_text1_transform(self):
+        return self.axes.get_yaxis_text1_transform(self._pad)
+
+    def _get_text2_transform(self):
+        return self.axes.get_yaxis_text2_transform(self._pad)
+
+    def apply_tickdir(self, tickdir):
+        if tickdir is None:
+            tickdir = rcParams['%s.direction' % self._name]
+        self._tickdir = tickdir
+
+        if self._tickdir == 'in':
+            self._tickmarkers = (mlines.TICKRIGHT, mlines.TICKLEFT)
+            self._pad = self._base_pad
+        else:
+            self._tickmarkers = (mlines.TICKLEFT, mlines.TICKRIGHT)
+            self._pad = self._base_pad + self._size
+
+
     # how far from the y axis line the right of the ticklabel are
     def _get_text1(self):
         'Get the default Text instance'
         # x in axes coords, y in data coords
-        trans, vert, horiz = self.axes.get_yaxis_text1_transform(self._pad)
+        trans, vert, horiz = self._get_text1_transform()
         t = mtext.Text(
             x=0, y=0,
             fontproperties=font_manager.FontProperties(size=self._labelsize),
@@ -432,7 +506,7 @@
     def _get_text2(self):
         'Get the default Text instance'
         # x in axes coords, y in data coords
-        trans, vert, horiz = self.axes.get_yaxis_text2_transform(self._pad)
+        trans, vert, horiz = self._get_text2_transform()
         t = mtext.Text(
             x=1, y=0,
             fontproperties=font_manager.FontProperties(size=self._labelsize),
@@ -450,7 +524,7 @@
 
         l = mlines.Line2D( (0,), (0,),
                     color=self._color,
-                    marker = self._ytickmarkers[0],
+                    marker = self._tickmarkers[0],
                     linestyle = 'None',
                     markersize=self._size,
                     markeredgewidth=self._width,
@@ -465,7 +539,7 @@
         # x in axes coords, y in data coords
         l = mlines.Line2D( (1,), (0,),
                     color=self._color,
-                    marker = self._ytickmarkers[1],
+                    marker = self._tickmarkers[1],
                     linestyle = 'None',
                     markersize=self._size,
                     markeredgewidth=self._width,
@@ -715,7 +789,15 @@
             if reset:
                 d.clear()
             d.update(kwtrans)
-        self.reset_ticks()
+        if reset:
+            self.reset_ticks()
+        else:
+            if which == 'major' or which == 'both':
+                 for tick in self.majorTicks:
+                    tick._apply_params(**self._major_tick_kw)
+            if which == 'minor' or which == 'both':
+                 for tick in self.minorTicks:
+                    tick._apply_params(**self._minor_tick_kw)
 
     @staticmethod
     def _translate_tick_kw(kw, to_init_kw=True):
@@ -733,7 +815,7 @@
         # The following lists may be moved to a more
         # accessible location.
         kwkeys0 = ['size', 'width', 'color', 'tickdir', 'pad',
-                  'labelsize', 'labelcolor', 'zorder',
+                  'labelsize', 'labelcolor', 'zorder', 'gridOn',
                   'tick1On', 'tick2On', 'label1On', 'label2On']
         kwkeys1 = ['length', 'direction', 'left', 'bottom', 'right', 'top',
                     'labelleft', 'labelbottom', 'labelright', 'labeltop']
@@ -1144,21 +1226,26 @@
         if len(kwargs): b = True
         which = which.lower()
         if which in ['minor', 'both']:
-            if b is None: self._gridOnMinor = not self._gridOnMinor
-            else: self._gridOnMinor = b
+            if b is None:
+                self._gridOnMinor = not self._gridOnMinor
+            else:
+                self._gridOnMinor = b
             for tick in self.minorTicks:  # don't use get_ticks here!
                 if tick is None: continue
                 tick.gridOn = self._gridOnMinor
                 if len(kwargs): artist.setp(tick.gridline,**kwargs)
+            self._minor_tick_kw['gridOn'] = self._gridOnMinor
         if which in ['major', 'both']:
-            if b is None: self._gridOnMajor = not self._gridOnMajor
-            else: self._gridOnMajor = b
+            if b is None:
+                self._gridOnMajor = not self._gridOnMajor
+            else:
+                self._gridOnMajor = b
             for tick in self.majorTicks:  # don't use get_ticks here!
                 if tick is None: continue
                 tick.gridOn = self._gridOnMajor
                 if len(kwargs): artist.setp(tick.gridline,**kwargs)
+            self._major_tick_kw['gridOn'] = self._gridOnMajor
 
-
     def update_units(self, data):
         """
         introspect *data* for units converter and update the
@@ -1552,50 +1639,30 @@
         """
         Set the ticks position (top, bottom, both, default or none)
         both sets the ticks to appear on both positions, but does not
-        change the tick labels.  default resets the tick positions to
-        the default: ticks on both positions, labels at bottom.  none
-        can be used if you don't want any ticks.
+        change the tick labels.  'default' resets the tick positions to
+        the default: ticks on both positions, labels at bottom.  'none'
+        can be used if you don't want any ticks. 'none' and 'both'
+        affect only the ticks, not the labels.
 
         ACCEPTS: [ 'top' | 'bottom' | 'both' | 'default' | 'none' ]
         """
-        assert position in ('top', 'bottom', 'both', 'default', 'none')
-
-
-        # The first ticks of major & minor ticks should always be
-        # included, otherwise, the information can be lost. Thus, use
-        # majorTicks instead of get_major_ticks() which may return
-        # empty list.
-        ticks = list( self.majorTicks ) # a copy
-        ticks.extend( self.minorTicks )
-
         if position == 'top':
-            for t in ticks:
-                t.tick1On = False
-                t.tick2On = True
-                t.label1On = False
-                t.label2On = True
+            self.set_tick_params(which='both', top=True, labeltop=True,
+                                 bottom=False, labelbottom=False)
         elif position == 'bottom':
-            for t in ticks:
-                t.tick1On = True
-                t.tick2On = False
-                t.label1On = True
-                t.label2On = False
+            self.set_tick_params(which='both', top=False, labeltop=False,
+                                 bottom=True, labelbottom=True)
+        elif position == 'both':
+            self.set_tick_params(which='both', top=True,
+                                 bottom=True)
+        elif position == 'none':
+            self.set_tick_params(which='both', top=False,
+                                 bottom=False)
         elif position == 'default':
-            for t in ticks:
-                t.tick1On = True
-                t.tick2On = True
-                t.label1On = True
-                t.label2On = False
-        elif position == 'none':
-            for t in ticks:
-                t.tick1On = False
-                t.tick2On = False
+            self.set_tick_params(which='both', top=True, labeltop=False,
+                                 bottom=True, labelbottom=True)
         else:
-            for t in ticks:
-                t.tick1On = True
-                t.tick2On = True
-        for t in ticks:
-            t.update_position(t._loc)
+            raise ValueError("invalid position: %s" % position)
 
     def tick_top(self):
         'use ticks only on top'
@@ -1829,45 +1896,23 @@
 
         ACCEPTS: [ 'left' | 'right' | 'both' | 'default' | 'none' ]
         """
-        assert position in ('left', 'right', 'both', 'default', 'none')
-
-        # The first ticks of major & minor ticks should always be
-        # included, otherwise, the information can be lost. Thus, use
-        # majorTicks instead of get_major_ticks() which may return
-        # empty list.
-        ticks = list( self.majorTicks ) # a copy
-        ticks.extend( self.minorTicks )
-
         if position == 'right':
-            self.set_offset_position('right')
-            for t in ticks:
-                t.tick1On = False
-                t.tick2On = True
-                t.label1On = False
-                t.label2On = True
+            self.set_tick_params(which='both', right=True, labelright=True,
+                                 left=False, labelleft=False)
         elif position == 'left':
-            self.set_offset_position('left')
-            for t in ticks:
-                t.tick1On = True
-                t.tick2On = False
-                t.label1On = True
-                t.label2On = False
+            self.set_tick_params(which='both', right=False, labelright=False,
+                                 left=True, labelleft=True)
+        elif position == 'both':
+            self.set_tick_params(which='both', right=True,
+                                 left=True)
+        elif position == 'none':
+            self.set_tick_params(which='both', right=False, labelright=False,
+                                 left=False, labelleft=False)
         elif position == 'default':
-            self.set_offset_position('left')
-            for t in ticks:
-                t.tick1On = True
-                t.tick2On = True
-                t.label1On = True
-                t.label2On = False
-        elif position == 'none':
-            for t in ticks:
-                t.tick1On = False
-                t.tick2On = False
+            self.set_tick_params(which='both', right=True, labelright=False,
+                                 left=True, labelleft=True)
         else:
-            self.set_offset_position('left')
-            for t in ticks:
-                t.tick1On = True
-                t.tick2On = True
+            raise ValueError("invalid position: %s" % position)
 
     def tick_right(self):
         'use ticks only on right'

Modified: trunk/matplotlib/lib/matplotlib/projections/geo.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/projections/geo.py  2010-07-02 19:03:05 UTC 
(rev 8487)
+++ trunk/matplotlib/lib/matplotlib/projections/geo.py  2010-07-02 22:44:27 UTC 
(rev 8488)
@@ -55,6 +55,9 @@
         self.yaxis.set_minor_locator(NullLocator())
         self.xaxis.set_ticks_position('none')
         self.yaxis.set_ticks_position('none')
+        self.yaxis.set_tick_params(label1On=True)
+        # Why do we need to turn on yaxis tick labels, but
+        # xaxis tick labels are already on?
 
         self.grid(rcParams['axes.grid'])
 

Modified: trunk/matplotlib/lib/matplotlib/projections/polar.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/projections/polar.py        2010-07-02 
19:03:05 UTC (rev 8487)
+++ trunk/matplotlib/lib/matplotlib/projections/polar.py        2010-07-02 
22:44:27 UTC (rev 8488)
@@ -226,6 +226,9 @@
         self.grid(rcParams['polaraxes.grid'])
         self.xaxis.set_ticks_position('none')
         self.yaxis.set_ticks_position('none')
+        self.yaxis.set_tick_params(label1On=True)
+        # Why do we need to turn on yaxis tick labels, but
+        # xaxis tick labels are already on?
 
     def _init_axis(self):
         "move this out of __init__ because non-separable axes don't use it"


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Matplotlib-checkins mailing list
Matplotlib-checkins@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to