[Rd] bug in plot.table(..., log='y')?

Martin Maechler m@ech|er @end|ng |rom @t@t@m@th@ethz@ch
Mon May 30 12:40:56 CEST 2022


>>>>> Spencer Graves 
>>>>>     on Sat, 28 May 2022 11:41:49 -0500 writes:

    > On 5/28/22 11:23 AM, Duncan Murdoch wrote:
    >> On 28/05/2022 11:33 a.m., Spencer Graves wrote:
    >>> Dear R Developers:
    >>> 
    >>> 
    >>>       Consider the following example:
    >>> 
    >>> 
    >>> (tstTable <- table(rep(1:3, 3:1))) plot(tstTable)
    >>> plot(tstTable, log='y')
    >>> 
    >>> 
    >>>       "plot(tstTable)" works as expected. 
    >>> "plot(tstTable, log='y')" gives a warning:
    >>> 
    >>> 
    >>> Warning message: In plot.window(...) :     nonfinite
    >>> axis=2 limits [GScale(-inf,0.477121,..); log=TRUE] --
    >>> corrected now
    >>> 
    >>> 
    >>>       AND the plot has a y axis scale running from
    >>> 1e-307 to 1e+13.
    >>> 
    >>> 
    >>>       This is with R 4.2.0 (R Console and the current
    >>> RStudio) under macOS 11.6.6.
    >>> 
    >>> 
    >>>       "plot(as.numeric(names(tstTable),
    >>> as.numeric(tstTable), log='y'))" works as expected ;-)
    >>> 
    >>> 
    >>>       Comments?        Thanks for your valuable work in
    >>> making it easier for people everywhere to do quality
    >>> statistics.
    >> 
    >> The help page ?plot.table says that ylim defaults to c(0,
    >> max(x)), i.e.  c(0,3) in your example.  If you're asking
    >> to plot that on a log scale, there are bound to be
    >> problems.
    >> 
    >> If you specify ylim, e.g. as c(min(tstTable),
    >> max(tstTable)), things are fine in your example; they
    >> won't be in examples where the min is zero.
    >> 
    >> Duncan Murdoch

    > 	  Thanks.  I looked at the help file but didn't read it
    > carefully enough.

    > 	  Spencer

If you have a table with  0  counts  and think you'd prefer
log="y" --- something I strongly agree is often a good idea,
giving much more useful plots --- 

I'd consider in this case using the good old  
   log( 1+   y )
or log( eps+ y )  trick.

My colleague Werner Stahel has spent quite a bit of effort in
order to make such "log-transformed plots in case of {zero etc}"
plot even smarter and convenient...
and has put this (and many more related ideas of doing smart and
robust good data analysis) in his package 'plgraphics'
(on R-forge, but still not on CRAN unfortunately).
With many thanks to Ian Howson, still nicely available also here:

    https://rdrr.io/rforge/plgraphics/

His generalized  log(1 + y)   is  plgraphics::logst(),
documented on the rdrr mirror here
  https://rdrr.io/rforge/plgraphics/man/logst.html

Martin



More information about the R-devel mailing list