[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