autoscale problem?

Hello,

When I run:

from pylab import *
data = [1.6e-012, 3.0e-012]
plot(data)

the y axis autoscales to 1.8e-12 - 3.2e-12. I get the same behavior when I run in interactive mode or save the figure to png.

Does anyone know if this is a bug or if there's something I can do to make the autoscaling work out?

Thanks,
John

P.S. Here's the output from the --verbose-helpful flag:

matplotlib data path c:\pyle\python23\share\matplotlib
loaded rc file c:\pyle\python23\share\matplotlib\.matplotlibrc
matplotlib version 0.72.1
verbose.level helpful
interactive is False
platform is win32
numerix numarray 1.2.2
font search path ['c:\\pyle\\python23\\share\\matplotlib']
loaded ttfcache file C:/msys/1.0/home/artsys\.ttffont.cache
backend Agg version v2.2

Hi John,

It is a bug. I suggest making the following change to ticker.py, starting at
line 501 in version 0.72.1:

    def le(self, x):
        'return the largest multiple of base <= x'
        d,m = divmod(x, self._base)
        if closeto(m/self._base,1): # was closeto(m, self._base)
            #looks like floating point error
            return (d+1)*self._base
        else:
            return d*self._base

Darren

···

On Wednesday 16 March 2005 06:26 pm, John Pyle wrote:

Hello,

When I run:

from pylab import *
data = [1.6e-012, 3.0e-012]
plot(data)

the y axis autoscales to 1.8e-12 - 3.2e-12. I get the same behavior when
I run in interactive mode or save the figure to png.

Does anyone know if this is a bug or if there's something I can do to
make the autoscaling work out?

Thanks,
John

P.S. Here's the output from the --verbose-helpful flag:

matplotlib data path c:\pyle\python23\share\matplotlib
loaded rc file c:\pyle\python23\share\matplotlib\.matplotlibrc
matplotlib version 0.72.1
verbose.level helpful
interactive is False
platform is win32
numerix numarray 1.2.2
font search path ['c:\\pyle\\python23\\share\\matplotlib']
loaded ttfcache file C:/msys/1.0/home/artsys\.ttffont.cache
backend Agg version v2.2

-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

--

Darren

I was testing this bugfix with plot([1.4e-12,3.0e-12]), and noticed that the
1.4e-12 ticklabel was being dropped.

In ticker.py, I suggest replacing Base.ge with:

    def ge(self, x):
        'return the largest multiple of base >= x'
        d,m = divmod(x, self._base)
        if closeto(m,0) and not closeto(m/self._base,1): return x
        return (d+1)*self._base

The fourth line used to be if m==0: return x, which fails sometimes due to
floating point inaccuracy. John, remember I was complaining about how certain
ticklabels wouldnt get rendered in the new scalarformatter I posted a couple
weeks ago? This was the problem.

Darren

···

On Wednesday 16 March 2005 07:59 pm, Darren Dale wrote:

I suggest making the following change to ticker.py, starting
at line 501 in version 0.72.1:

    def le(self, x):
        'return the largest multiple of base <= x'
        d,m = divmod(x, self._base)
        if closeto(m/self._base,1): # was closeto(m, self._base)
            #looks like floating point error
            return (d+1)*self._base
        else:
            return d*self._base

Darren,

This works great for me - thanks!

I should have said this earlier, but matplotlib is excellent! Thank you to everyone who works on it.

John

Darren Dale wrote:

···

On Wednesday 16 March 2005 07:59 pm, Darren Dale wrote:

I suggest making the following change to ticker.py, starting
at line 501 in version 0.72.1:

   def le(self, x):
       'return the largest multiple of base <= x'
       d,m = divmod(x, self._base)
       if closeto(m/self._base,1): # was closeto(m, self._base)
           #looks like floating point error
           return (d+1)*self._base
       else:
           return d*self._base

I was testing this bugfix with plot([1.4e-12,3.0e-12]), and noticed that the 1.4e-12 ticklabel was being dropped.

In ticker.py, I suggest replacing Base.ge with:

   def ge(self, x):
       'return the largest multiple of base >= x'
       d,m = divmod(x, self._base)
       if closeto(m,0) and not closeto(m/self._base,1): return x
       return (d+1)*self._base

The fourth line used to be if m==0: return x, which fails sometimes due to floating point inaccuracy. John, remember I was complaining about how certain ticklabels wouldnt get rendered in the new scalarformatter I posted a couple weeks ago? This was the problem.

Darren