Ok, good, I just wanted to do a sanity check.

On Thu, May 20, 2010 at 9:21 AM, Michael Droettboom <md...@stsci.edu> wrote:

> In this case, yes.  The assumption of these (private) functions is that
> x will be non-negative.  The only case where we need to worry about log
> raising an exception is with exactly 0.
>
> Mike
>
> On 05/20/2010 10:08 AM, Benjamin Root wrote:
> > Do we really want to depend on a floating point equality?
> >
> > Ben Root
> >
> > On Thu, May 20, 2010 at 9:02 AM, Michael Droettboom<md...@stsci.edu>
>  wrote:
> >
> >
> >> Yep.  That's a bug.  Here's a patch to fix it:
> >>
> >> ndex: lib/matplotlib/ticker.py
> >> ===================================================================
> >> --- lib/matplotlib/ticker.py    (revision 8323)
> >> +++ lib/matplotlib/ticker.py    (working copy)
> >> @@ -1178,16 +1178,21 @@
> >>
> >>   def decade_down(x, base=10):
> >>       'floor x to the nearest lower decade'
> >> -
> >> +    if x == 0.0:
> >> +        return -base
> >>       lx = math.floor(math.log(x)/math.log(base))
> >>       return base**lx
> >>
> >>   def decade_up(x, base=10):
> >>       'ceil x to the nearest higher decade'
> >> +    if x == 0.0:
> >> +        return base
> >>       lx = math.ceil(math.log(x)/math.log(base))
> >>       return base**lx
> >>
> >>   def is_decade(x,base=10):
> >> +    if x == 0.0:
> >> +        return True
> >>        lx = math.log(x)/math.log(base)
> >>        return lx==int(lx)
> >>
> >> Mike
> >>
> >> On 05/20/2010 09:43 AM, Christer wrote:
> >>
> >>> Thank you for the help, I never knew what the symlog flag did actually.
> >>>
> >>> However, there is still a slight problem:
> >>>
> >>> =====================================================
> >>> x = array([0,1,2,4,6,9,12,24])
> >>> y = array([1000000, 500000, 100000, 100, 5, 1, 1, 1])
> >>> subplot(111)
> >>> plot(x, y)
> >>> yscale('symlog')
> >>> xscale=('linear')
> >>> ylim(-1,10000000)
> >>> show()
> >>> =====================================================
> >>>
> >>> The plot looks exactly like I want it, the problem is when I change
> >>> the "1"'s to "0"'s in the y-array, then I get a:
> >>>
> >>> File "C:\Python26\lib\site-packages\matplotlib\ticker.py", line 1029,
> >>> in is_decade
> >>>        lx = math.log(x)/math.log(base)
> >>> ValueError: math domain error
> >>>
> >>> I suppose that means somewhere a log(0) is attempted. This kind of
> >>> defeats the purpose...
> >>>
> >>> /C
> >>>
> >>> Quoting Eric Firing<efir...@hawaii.edu>:
> >>>
> >>>
> >>>
> >>>> On 05/19/2010 10:28 AM, Benjamin Root wrote:
> >>>>
> >>>>
> >>>>> Maybe I am misunderstanding your problem, but you can select
> >>>>>
> >>>>>
> >>> 'semilog'
> >>>
> >>>
> >>>>> for the x/yscale parameter.
> >>>>>
> >>>>>
> >>>> You mean "symlog".
> >>>>
> >>>> See
> >>>>
> >>>>
> >>>>
> >>>
> >>
> http://matplotlib.sourceforge.net/examples/pylab_examples/symlog_demo.html
> >>
> >>>
> >>>> Although the example doesn't show it, the axis limits don't have to be
> >>>> symmetric.  For example, on the top plot, you can use
> >>>>
> >>>> gca().set_xlim([0, 100])
> >>>>
> >>>> to show only the right-hand side.
> >>>>
> >>>> Eric
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>> Ben Root
> >>>>>
> >>>>> On Wed, May 19, 2010 at 7:03 AM, Christer Malmberg
> >>>>> <christer.malmberg.0...@student.uu.se
> >>>>> <mailto:christer.malmberg.0...@student.uu.se>>   wrote:
> >>>>>
> >>>>>       Hi,
> >>>>>
> >>>>>       my problem is that I need a graph with a discontinous y-axis.
> Let
> >>>>>
> >>>>>
> >>> me
> >>>
> >>>
> >>>>>       explain the problem: in my field (microbiology) the data
> >>>>>
> >>>>>
> >>> generated
> >>>
> >>>
> >>>>>       from for example growth assays have a huge range (10^0-10^9),
> >>>>>
> >>>>>
> >>> which
> >>>
> >>>
> >>>>>       has to be plotted on a semilogy style plot (cell concentration
> >>>>>
> >>>>>
> >>> vs.
> >>>
> >>>
> >>>>>       time). The problem is that 0 cells is a useful number to plot
> >>>>>       (indicates cell concentration lower than detection limit), but
> of
> >>>>>       course not possible to show in a log diagram. This is easily
> >>>>>
> >>>>>
> >>> solved on
> >>>
> >>>
> >>>>>       old-style logarithmic graph paper; since the data will be
> either
> >>>>>
> >>>>>
> >>> 0, or
> >>>
> >>>
> >>>>>        >1 it is customary just to draw a zero x-axis at 10^-1 on the
> >>>>>
> >>>>>
> >>> paper
> >>>
> >>>
> >>>>>       and that's that. On the computer, this is extremely hard. Most
> >>>>>
> >>>>>
> >>> people
> >>>
> >>>
> >>>>>       I know resort to various tricks in Excel, such as entering a
> >>>>>
> >>>>>
> >>> small
> >>>
> >>>
> >>>>>       number (0.001 etc) and starting the y-axis range from 10^1 to
> >>>>>
> >>>>>
> >>> hide the
> >>>
> >>>
> >>>>>       problem. This makes excel draw a line, instead of leaving out
> the
> >>>>>
> >>>>>
> >>> dot
> >>>
> >>>
> >>>>>       and line entirely. The part of the curve below the x-axis is
> then
> >>>>>       manually cut off in a suitable image editor. Needless to say,
> >>>>>
> >>>>>
> >>> this is
> >>>
> >>>
> >>>>>       extremely kludgy. Even professional graphing packages like
> >>>>>
> >>>>>
> >>> Graphpad
> >>>
> >>>
> >>>>>       Prism resort to similar kludges (re-define 0 values to 0.1,
> >>>>>
> >>>>>
> >>> change the
> >>>
> >>>
> >>>>>       y-axis tick label to "0" etc.) This problem of course exists in
> >>>>>
> >>>>>
> >>> other
> >>>
> >>>
> >>>>>       fields, while investigating a solution I found a guy who worked
> >>>>>
> >>>>>
> >>> with
> >>>
> >>>
> >>>>>       aerosol contamination in clean rooms, and he needed to plot
> >>>>>
> >>>>>
> >>> values
> >>>
> >>>
> >>>>>       logarithmically, at the same time as showing detector noise
> >>>>>
> >>>>>
> >>> around
> >>>
> >>>
> >>>>>       1-10 particles. He solved it by the same trick I would like to
> do
> >>>>>
> >>>>>
> >>> in
> >>>
> >>>
> >>>>>       Matplotlib, namely plotting a standard semilogy plot but with
> the
> >>>>>       10^-1 to 10^0 decade being replaced by a 0-1 linear axis on the
> >>>>>
> >>>>>
> >>> same
> >>>
> >>>
> >>>>>       side.
> >>>>>
> >>>>>       The guy in this post has the same problem and a useful example:
> >>>>>       http://ubuntuforums.org/showthread.php?t=394851
> >>>>>
> >>>>>       His partial solution is quite bad though, and I just got stuck
> >>>>>
> >>>>>
> >>> while
> >>>
> >>>
> >>>>>       trying to improve it. I looked around the gallery for useful
> >>>>>
> >>>>>
> >>> examples,
> >>>
> >>>
> >>>>>       and the closest I could find is the twinx/twiny function, but I
> >>>>>
> >>>>>
> >>> didn't
> >>>
> >>>
> >>>>>       manage a plot that put one data curve across both axes.
> >>>>>
> >>>>>       This code gives an image that maybe explains what I'm trying to
> >>>>>
> >>>>>
> >>> do:
> >>>
> >>>
> >>>>>       =======================================
> >>>>>       t = array([0,1,2,4,6,9,12,24])
> >>>>>       y = array([1000000, 500000, 100000, 100, 5, 1, 0, 0])
> >>>>>       subplot(111, xscale="linear", yscale="log")
> >>>>>       errorbar(x, y, yerr=0.4*y)
> >>>>>       linbit = axes([0.125, 0.1, 0.775, 0.1],frameon=False)
> >>>>>       linbit.xaxis.set_visible(False)
> >>>>>       for tl in linbit.get_yticklabels():
> >>>>>            tl.set_color('r')
> >>>>>       show()
> >>>>>       =======================================
> >>>>>
> >>>>>       (the y=0 points should be plotted and connected to the line in
> >>>>>
> >>>>>
> >>> the
> >>>
> >>>
> >>>>>       log part)
> >>>>>
> >>>>>       Is this possible to do in matplotlib? Could someone give me a
> >>>>>
> >>>>>
> >>> pointer
> >>>
> >>>
> >>>>>       on how to go on?
> >>>>>
> >>>>>       Sorry for the long mail,
> >>>>>
> >>>>>       /C
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>
> >>
> ------------------------------------------------------------------------------
> >>
> >>>
> >>>>>       _______________________________________________
> >>>>>       Matplotlib-users mailing list
> >>>>>       Matplotlib-users@lists.sourceforge.net
> >>>>>       <mailto:Matplotlib-users@lists.sourceforge.net>
> >>>>>       https://lists.sourceforge.net/lists/listinfo/matplotlib-users
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>
> >>
> ------------------------------------------------------------------------------
> >>
> >>>
> >>>>>
> >>>>>
> >>>>> _______________________________________________
> >>>>> Matplotlib-users mailing list
> >>>>> Matplotlib-users@lists.sourceforge.net
> >>>>> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
> >>>>>
> >>>>>
> >>>>
> >>>>
> >>>>
> >>>
> >>
> ------------------------------------------------------------------------------
> >>
> >>>
> >>>> _______________________________________________
> >>>> Matplotlib-users mailing list
> >>>> Matplotlib-users@lists.sourceforge.net
> >>>> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
> >>>>
> >>>>
> >>>>
> >>>
> >>>
> >>>
> >>
> ------------------------------------------------------------------------------
> >>
> >>> _______________________________________________
> >>> Matplotlib-users mailing list
> >>> Matplotlib-users@lists.sourceforge.net
> >>> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
> >>>
> >>>
> >>
> >> --
> >> Michael Droettboom
> >> Science Software Branch
> >> Space Telescope Science Institute
> >> Baltimore, Maryland, USA
> >>
> >>
> >>
> >>
> ------------------------------------------------------------------------------
> >>
> >> _______________________________________________
> >> Matplotlib-users mailing list
> >> Matplotlib-users@lists.sourceforge.net
> >> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
> >>
> >>
> >
>
>
> --
> Michael Droettboom
> Science Software Branch
> Space Telescope Science Institute
> Baltimore, Maryland, USA
>
>
>
> ------------------------------------------------------------------------------
>
> _______________________________________________
> Matplotlib-users mailing list
> Matplotlib-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
------------------------------------------------------------------------------

_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to