[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