Revision: 8496
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8496&view=rev
Author:   efiring
Date:     2010-07-05 20:47:39 +0000 (Mon, 05 Jul 2010)

Log Message:
-----------
set_xlim, set_ylim accept descriptive kwargs: left, right, bottom, top

Modified Paths:
--------------
    trunk/matplotlib/CHANGELOG
    trunk/matplotlib/doc/api/api_changes.rst
    trunk/matplotlib/lib/matplotlib/axes.py

Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG  2010-07-05 19:39:59 UTC (rev 8495)
+++ trunk/matplotlib/CHANGELOG  2010-07-05 20:47:39 UTC (rev 8496)
@@ -1,7 +1,11 @@
+2010-07-05 Preferred kwarg names in set_xlim are now 'left' and
+           'right'; in set_ylim, 'bottom' and 'top'; original
+           kwargs are still accepted without complaint. - EF
+
 2010-07-05 TkAgg and FltkAgg backends are now consistent with other
            interactive backends: when used in scripts from the
            command line (not from ipython -pylab), show blocks,
-           and can be called more than once.
+           and can be called more than once. - EF
 
 2010-07-02 Modified CXX/WrapPython.h to fix "swab bug" on solaris so
            mpl can compile on Solaris with CXX6 in the trunk.  Closes

Modified: trunk/matplotlib/doc/api/api_changes.rst
===================================================================
--- trunk/matplotlib/doc/api/api_changes.rst    2010-07-05 19:39:59 UTC (rev 
8495)
+++ trunk/matplotlib/doc/api/api_changes.rst    2010-07-05 20:47:39 UTC (rev 
8496)
@@ -16,7 +16,10 @@
   pyplot functions, has been changed: when view limits are
   set explicitly with one of these methods, autoscaling is turned
   off for the matching axis. A new *auto* kwarg is available to
-  control this behavior.
+  control this behavior. The limit kwargs have been renamed to
+  *left* and *right* instead of *xmin* and *xmax*, and *bottom*
+  and *top* instead of *ymin* and *ymax*.  The old names may still
+  be used, however.
 
 * There are five new Axes methods with corresponding pyplot
   functions to facilitate autoscaling, tick location, and tick

Modified: trunk/matplotlib/lib/matplotlib/axes.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/axes.py     2010-07-05 19:39:59 UTC (rev 
8495)
+++ trunk/matplotlib/lib/matplotlib/axes.py     2010-07-05 20:47:39 UTC (rev 
8496)
@@ -2298,11 +2298,11 @@
 
     def get_xlim(self):
         """
-        Get the x-axis range [*xmin*, *xmax*]
+        Get the x-axis range [*left*, *right*]
         """
         return tuple(self.viewLim.intervalx)
 
-    def set_xlim(self, xmin=None, xmax=None, emit=True, auto=False):
+    def set_xlim(self, left=None, right=None, emit=True, auto=False, **kw):
         """
         call signature::
 
@@ -2314,23 +2314,23 @@
 
           set_xlim((left, right))
           set_xlim(left, right)
-          set_xlim(xmin=1) # right unchanged
-          set_xlim(xmax=1) # left unchanged
+          set_xlim(left=1) # right unchanged
+          set_xlim(right=1) # left unchanged
 
         Keyword arguments:
 
-          *xmin*: scalar
-            the left xlim
-          *xmax*: scalar
-            the right xlim
+          *left*: scalar
+            the left xlim; *xmin*, the previous name, may still be used
+          *right*: scalar
+            the right xlim; *xmax*, the previous name, may still be used
           *emit*: [ True | False ]
             notify observers of lim change
           *auto*: [ True | False | None ]
             turn *x* autoscaling on (True), off (False; default),
             or leave unchanged (None)
 
-        Note: the kwarg terminology may be confusing.  The first value,
-        *xmin*, is the left, and the second, *xmax*, is the right.
+        Note: the *left* (formerly *xmin*) value may be greater than
+        the *right* (formerly *xmax*).
         For example, suppose *x* is years before present.
         Then one might use::
 
@@ -2343,26 +2343,34 @@
 
         ACCEPTS: len(2) sequence of floats
         """
-        if xmax is None and iterable(xmin):
-            xmin,xmax = xmin
+        if 'xmin' in kw:
+            left = kw.pop('xmin')
+        if 'xmax' in kw:
+            right = kw.pop('xmax')
+        if kw:
+            raise ValueError("unrecognized kwargs: %s" % kw.keys())
 
+        if right is None and iterable(left):
+            left,right = left
 
-        self._process_unit_info(xdata=(xmin, xmax))
-        if xmin is not None:
-            xmin = self.convert_xunits(xmin)
-        if xmax is not None:
-            xmax = self.convert_xunits(xmax)
+        self._process_unit_info(xdata=(left, right))
+        if left is not None:
+            left = self.convert_xunits(left)
+        if right is not None:
+            right = self.convert_xunits(right)
 
-        old_xmin,old_xmax = self.get_xlim()
-        if xmin is None: xmin = old_xmin
-        if xmax is None: xmax = old_xmax
+        old_left, old_right = self.get_xlim()
+        if left is None: left = old_left
+        if right is None: right = old_right
 
-        if xmin==xmax:
-            warnings.warn('Attempting to set identical xmin==xmax results in 
singular transformations; automatically expanding.  xmin=%s, xmax=%s'%(xmin, 
xmax))
-        xmin, xmax = mtransforms.nonsingular(xmin, xmax, increasing=False)
-        xmin, xmax = self.xaxis.limit_range_for_scale(xmin, xmax)
+        if left==right:
+            warnings.warn(('Attempting to set identical left==right results\n'
+                   + 'in singular transformations; automatically expanding.\n'
+                   + 'left=%s, right=%s') % (left, right))
+        left, right = mtransforms.nonsingular(left, right, increasing=False)
+        left, right = self.xaxis.limit_range_for_scale(left, right)
 
-        self.viewLim.intervalx = (xmin, xmax)
+        self.viewLim.intervalx = (left, right)
         if auto is not None:
             self._autoscaleXon = bool(auto)
 
@@ -2377,7 +2385,7 @@
                         other.figure.canvas is not None):
                         other.figure.canvas.draw_idle()
 
-        return xmin, xmax
+        return left, right
 
     def get_xscale(self):
         'return the xaxis scale string: %s' % (
@@ -2492,11 +2500,11 @@
 
     def get_ylim(self):
         """
-        Get the y-axis range [*ymin*, *ymax*]
+        Get the y-axis range [*bottom*, *top*]
         """
         return tuple(self.viewLim.intervaly)
 
-    def set_ylim(self, ymin=None, ymax=None, emit=True, auto=False):
+    def set_ylim(self, bottom=None, top=None, emit=True, auto=False, **kw):
         """
         call signature::
 
@@ -2508,23 +2516,23 @@
 
           set_ylim((bottom, top))
           set_ylim(bottom, top)
-          set_ylim(ymin=1) # top unchanged
-          set_ylim(ymax=1) # bottom unchanged
+          set_ylim(bottom=1) # top unchanged
+          set_ylim(top=1) # bottom unchanged
 
         Keyword arguments:
 
-          *ymin*: scalar
-            the bottom ylim
-          *ymax*: scalar
-            the top ylim
+          *bottom*: scalar
+            the bottom ylim; the previous name, *ymin*, may still be used
+          *top*: scalar
+            the top ylim; the previous name, *ymax*, may still be used
           *emit*: [ True | False ]
             notify observers of lim change
           *auto*: [ True | False | None ]
             turn *y* autoscaling on (True), off (False; default),
             or leave unchanged (None)
 
-        Note: the kwarg terminology may be confusing.  The first value,
-        *ymin*, is the bottom, and the second, *ymax*, is the top.
+        Note: the *bottom* (formerly *ymin*) value may be greater than
+        the *top* (formerly *ymax*).
         For example, suppose *y* is depth in the ocean.
         Then one might use::
 
@@ -2537,26 +2545,35 @@
 
         ACCEPTS: len(2) sequence of floats
         """
-        if ymax is None and iterable(ymin):
-            ymin,ymax = ymin
+        if 'ymin' in kw:
+            bottom = kw.pop('ymin')
+        if 'ymax' in kw:
+            top = kw.pop('ymax')
+        if kw:
+            raise ValueError("unrecognized kwargs: %s" % kw.keys())
 
-        if ymin is not None:
-            ymin = self.convert_yunits(ymin)
-        if ymax is not None:
-            ymax = self.convert_yunits(ymax)
+        if top is None and iterable(bottom):
+            bottom,top = bottom
 
-        old_ymin,old_ymax = self.get_ylim()
+        if bottom is not None:
+            bottom = self.convert_yunits(bottom)
+        if top is not None:
+            top = self.convert_yunits(top)
 
-        if ymin is None: ymin = old_ymin
-        if ymax is None: ymax = old_ymax
+        old_bottom, old_top = self.get_ylim()
 
-        if ymin==ymax:
-            warnings.warn('Attempting to set identical ymin==ymax results in 
singular transformations; automatically expanding.  ymin=%s, ymax=%s'%(ymin, 
ymax))
+        if bottom is None: bottom = old_bottom
+        if top is None: top = old_top
 
-        ymin, ymax = mtransforms.nonsingular(ymin, ymax, increasing=False)
-        ymin, ymax = self.yaxis.limit_range_for_scale(ymin, ymax)
+        if bottom==top:
+            warnings.warn(('Attempting to set identical bottom==top results\n'
+                   + 'in singular transformations; automatically expanding.\n'
+                   + 'bottom=%s, top=%s') % (bottom, top))
 
-        self.viewLim.intervaly = (ymin, ymax)
+        bottom, top = mtransforms.nonsingular(bottom, top, increasing=False)
+        bottom, top = self.yaxis.limit_range_for_scale(bottom, top)
+
+        self.viewLim.intervaly = (bottom, top)
         if auto is not None:
             self._autoscaleYon = bool(auto)
 
@@ -2571,7 +2588,7 @@
                         other.figure.canvas is not None):
                         other.figure.canvas.draw_idle()
 
-        return ymin, ymax
+        return bottom, top
 
     def get_yscale(self):
         'return the xaxis scale string: %s' % (


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
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to