xlim() turns off autoscaling

The help for xlim() says:

     Set/Get the xlimits of the current axes::

       xmin, xmax = xlim() # return the current xlim
       xlim( (xmin, xmax) ) # set the xlim to xmin, xmax
       xlim( xmin, xmax ) # set the xlim to xmin, xmax

but it also has the unexpected behavior of turning off autoscaling if used:

···

-----
import matplotlib.pyplot as plt

plt.clf()
ax = plt.subplot(211)
plt.draw()
print 'autoscale X on: ',ax._autoscaleXon,' xlim: ',plt.xlim()
ax.plot([0,.5,1,1.5,2],[0,1,0,1,0])
plt.draw()
print 'autoscale X on: ',ax._autoscaleXon,' xlim: ',ax.get_xlim(),'\n'

ax = plt.subplot(212)
plt.draw()
print 'autoscale X on: ',ax._autoscaleXon,' xlim: ',ax.get_xlim()
plt.plot([0,.5,1,1.5,2],[0,1,0,1,0])
plt.draw()
print 'autoscale X on: ',ax._autoscaleXon,' xlim: ',ax.get_xlim(),'\n'
-----

returns:

>>> import xlim_unautoscale
autoscale X on: True xlim: (0.0, 1.0)
autoscale X on: False xlim: (0.0, 1.0)

autoscale X on: True xlim: (0.0, 1.0)
autoscale X on: True xlim: (0.0, 2.0)

I assume that this is because xlim() calls set_xlim() which has auto=False as a default keyword...

expected behavior: xlim() should behave exactly like get_xlim()
ditto for ylim()

M

The help for xlim() says:

      Set/Get the xlimits of the current axes::

        xmin, xmax = xlim() # return the current xlim
        xlim( (xmin, xmax) ) # set the xlim to xmin, xmax
        xlim( xmin, xmax ) # set the xlim to xmin, xmax

but it also has the unexpected behavior of turning off autoscaling if used:

-----
import matplotlib.pyplot as plt

plt.clf()
ax = plt.subplot(211)
plt.draw()
print 'autoscale X on: ',ax._autoscaleXon,' xlim: ',plt.xlim()
ax.plot([0,.5,1,1.5,2],[0,1,0,1,0])
plt.draw()
print 'autoscale X on: ',ax._autoscaleXon,' xlim: ',ax.get_xlim(),'\n'

ax = plt.subplot(212)
plt.draw()
print 'autoscale X on: ',ax._autoscaleXon,' xlim: ',ax.get_xlim()
plt.plot([0,.5,1,1.5,2],[0,1,0,1,0])
plt.draw()
print 'autoscale X on: ',ax._autoscaleXon,' xlim: ',ax.get_xlim(),'\n'
-----

returns:

  >>> import xlim_unautoscale
autoscale X on: True xlim: (0.0, 1.0)
autoscale X on: False xlim: (0.0, 1.0)

autoscale X on: True xlim: (0.0, 1.0)
autoscale X on: True xlim: (0.0, 2.0)

I assume that this is because xlim() calls set_xlim() which has
auto=False as a default keyword...

expected behavior: xlim() should behave exactly like get_xlim()
ditto for ylim()

I agree, so I have fixed this in the maintenance branch and in the trunk.

Eric

···

On 02/06/2011 06:59 AM, Mike Kaufman wrote:

M

------------------------------------------------------------------------------
The modern datacenter depends on network connectivity to access resources
and provide services. The best practices for maximizing a physical server's
connectivity to a physical network are well understood - see how these
rules translate into the virtual world?
http://p.sf.net/sfu/oracle-sfdevnlfb
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
matplotlib-devel List Signup and Options

Something I just noticed while looking at the x|ylim() functions. The code for xscale() and yscale() are acting like it returns something, but they don’t. Is this a bug? The documentation doesn’t claim that it returns anything.

Ben Root

···

On Sun, Feb 6, 2011 at 11:52 AM, Eric Firing <efiring@…229…> wrote:

On 02/06/2011 06:59 AM, Mike Kaufman wrote:

The help for xlim() says:

  Set/Get the xlimits of the current axes::
    xmin, xmax = xlim()   # return the current xlim
    xlim( (xmin, xmax) )  # set the xlim to xmin, xmax
    xlim( xmin, xmax )    # set the xlim to xmin, xmax

but it also has the unexpected behavior of turning off autoscaling if used:


import matplotlib.pyplot as plt

plt.clf()

ax = plt.subplot(211)

plt.draw()

print 'autoscale X on: ‘,ax._autoscaleXon,’ xlim: ',plt.xlim()

ax.plot([0,.5,1,1.5,2],[0,1,0,1,0])

plt.draw()

print ‘autoscale X on: ‘,ax._autoscaleXon,’ xlim: ‘,ax.get_xlim(),’\n’

ax = plt.subplot(212)

plt.draw()

print 'autoscale X on: ‘,ax._autoscaleXon,’ xlim: ',ax.get_xlim()

plt.plot([0,.5,1,1.5,2],[0,1,0,1,0])

plt.draw()

print ‘autoscale X on: ‘,ax._autoscaleXon,’ xlim: ‘,ax.get_xlim(),’\n’


returns:

import xlim_unautoscale

autoscale X on: True xlim: (0.0, 1.0)

autoscale X on: False xlim: (0.0, 1.0)

autoscale X on: True xlim: (0.0, 1.0)

autoscale X on: True xlim: (0.0, 2.0)

I assume that this is because xlim() calls set_xlim() which has

auto=False as a default keyword…

expected behavior: xlim() should behave exactly like get_xlim()

ditto for ylim()

I agree, so I have fixed this in the maintenance branch and in the trunk.

Eric

[...]

Something I just noticed while looking at the x|ylim() functions. The
code for xscale() and yscale() are acting like it returns something, but
they don't. Is this a bug? The documentation doesn't claim that it
returns anything.

Ben,

Like ax.xscale etc, it returns None.

It's not exactly a bug--the behavior is correct and matches the documentation--but the code is misleading and less concise than it could be. Having noticed it, you might as well clean it up. The code would be clearer without the use of "ret" and "return", though the end effect will be no different.

Eric

···

On 02/06/2011 08:11 AM, Benjamin Root wrote:

Ben Root

Done in the development branch in r8957

Ben Root

···

On Sun, Feb 6, 2011 at 2:02 PM, Eric Firing <efiring@…706…29…> wrote:

On 02/06/2011 08:11 AM, Benjamin Root wrote:

[…]

Something I just noticed while looking at the x|ylim() functions. The

code for xscale() and yscale() are acting like it returns something, but

they don’t. Is this a bug? The documentation doesn’t claim that it

returns anything.

Ben,

Like ax.xscale etc, it returns None.

It’s not exactly a bug–the behavior is correct and matches the

documentation–but the code is misleading and less concise than it could

be. Having noticed it, you might as well clean it up. The code would

be clearer without the use of “ret” and “return”, though the end effect

will be no different.

Eric