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

Bill Dunlap w||||@mwdun|@p @end|ng |rom gm@||@com
Mon May 30 18:38:45 CEST 2022


Martin wrote

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.


One could also sqrt(y), which helps stabilize the variances of count data.

Making nicely spaced and labelled tick marks for these transformations can
be a pain.  Perhaps some package already does this.

-Bill

On Mon, May 30, 2022 at 3:41 AM Martin Maechler <maechler using stat.math.ethz.ch>
wrote:

> >>>>> 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
>
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

	[[alternative HTML version deleted]]



More information about the R-devel mailing list