[R] graphical behavior of a table of numbers
Martin Maechler
maechler at stat.math.ethz.ch
Mon Jan 30 11:38:26 CET 2017
>>>>> Duncan Murdoch <murdoch.duncan at gmail.com>
>>>>> on Sun, 29 Jan 2017 06:32:27 -0500 writes:
> On 29/01/2017 12:05 AM, Jim Lemon wrote:
>> Hi Richard, I think there may be something amiss in the
>> plot.table function. As you note, changing the class of
>> fr to array produces a more sensible plot, as does Bert's
>> "as.vector". Yet inside plot.table we find:
>>
>> plot(x0, unclass(x), ...
>>
>> and that should produce an array:
>>
>> class(unclass(fr)) [1] "array"
>>
>> The plot.table function looks like it should produce the
>> plot you want, but it doesn't. I think (therefore I am
>> probably wrong) that a 1D table is handled in the same
>> way as multiD table rather than being squeezed into a
>> vector.
> I think the issue is that Axis() is called without
> removing the class. Axis.table sets ticks based on the
> names of the table.
> Duncan Murdoch
yes indeed! So this answers Rich Heiberger's question.
The example stems from a time long before there was
a plot.table() method, and even longer before plot.default() had
started using Axis() and its methods.
So a much nicer example for the R-intro -- committed a few
minutes ago -- is making use of the plot.table() S3 method :
d <- outer(0:9, 0:9)
fr <- table(outer(d, d, "-"))
plot(fr, type="h", xlab="Determinant", ylab="Frequency")
So this fulfills Rich's recommendation.
Martin
>> On Sun, Jan 29, 2017 at 11:19 AM, Bert Gunter <bgunter.4567 at gmail.com> wrote:
>>> Rich:
>>>
>>> Simpler: Just lose the "table" class.
>>>
>>> plot(as.numeric(names(fr)), as.vector(fr), type="h",
>>> xlab="Determinant", ylab="Frequency")
>>>
>>> However, I'm no less puzzled by the "strange" behavior than you.
>>>
>>> In addition, it's probably worth noting that xyplot in lattice (and no
>>> doubt ggplot,too) does not have this problem (as I'm sure you know):
>>>
>>> xyplot(fr ~ as.numeric(names(fr)), type="h",
>>> xlab="Determinant", ylab="Frequency")
>>>
>>>
>>> Cheers,
>>> Bert
>>> Bert Gunter
>>>
>>> "The trouble with having an open mind is that people keep coming along
>>> and sticking things into it."
>>> -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
>>>
>>>
>>> On Sat, Jan 28, 2017 at 3:03 PM, Richard M. Heiberger <rmh at temple.edu> wrote:
>>>> ## This example is from R-intro.pdf page 21 (R-3.3.2)
>>>>
>>>> d <- outer(0:9, 0:9)
>>>> fr <- table(outer(d, d, "-"))
>>>> plot(as.numeric(names(fr)), fr, type="h",
>>>> xlab="Determinant", ylab="Frequency")
>>>> ## The y-axis tick marks are at c(-21,24,65).
>>>> ## This seems to be because class(fr) == "table"
>>>>
>>>> ## Switching the class to array gives the more appropriate
>>>> ## y-axis ticks at seq(0,500,100) .
>>>>
>>>> fr.array <- fr
>>>> class(fr.array) <- "array"
>>>> plot(as.numeric(names(fr)), fr.array, type="h",
>>>> xlab="Determinant", ylab="Frequency")
>>>>
>>>>
>>>> ## I have a question and a recommendation.
>>>> ## Question:
>>>> ## Why are the y-axis ticks for the table defaulted to c(-21,24,65).
>>>> ##
>>>> ## Recommendation:
>>>> ## Changed the example on page 21 to show the ticks at seq(0,500,100)?
>>>>
>>>> ## Rich
>>>>
More information about the R-help
mailing list