

## This example is from Rintro.pdf page 21 (R3.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 yaxis 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
## yaxis 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 yaxis 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
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


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 < [hidden email]> wrote:
> ## This example is from Rintro.pdf page 21 (R3.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 yaxis 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
> ## yaxis 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 yaxis 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
>
> ______________________________________________
> [hidden email] mailing list  To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/rhelp> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html> and provide commented, minimal, selfcontained, reproducible code.
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


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.
Jim
On Sun, Jan 29, 2017 at 11:19 AM, Bert Gunter < [hidden email]> 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 < [hidden email]> wrote:
>> ## This example is from Rintro.pdf page 21 (R3.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 yaxis 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
>> ## yaxis 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 yaxis 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
>>
>> ______________________________________________
>> [hidden email] mailing list  To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/rhelp>> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html>> and provide commented, minimal, selfcontained, reproducible code.
>
> ______________________________________________
> [hidden email] mailing list  To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/rhelp> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html> and provide commented, minimal, selfcontained, reproducible code.
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


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
>
> Jim
>
>
> On Sun, Jan 29, 2017 at 11:19 AM, Bert Gunter < [hidden email]> 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 < [hidden email]> wrote:
>>> ## This example is from Rintro.pdf page 21 (R3.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 yaxis 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
>>> ## yaxis 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 yaxis 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
>>>
>>> ______________________________________________
>>> [hidden email] mailing list  To UNSUBSCRIBE and more, see
>>> https://stat.ethz.ch/mailman/listinfo/rhelp>>> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html>>> and provide commented, minimal, selfcontained, reproducible code.
>>
>> ______________________________________________
>> [hidden email] mailing list  To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/rhelp>> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html>> and provide commented, minimal, selfcontained, reproducible code.
>
> ______________________________________________
> [hidden email] mailing list  To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/rhelp> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html> and provide commented, minimal, selfcontained, reproducible code.
>
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


>>>>> Duncan Murdoch < [hidden email]>
>>>>> 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 Rintro  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 < [hidden email]> 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 < [hidden email]> wrote:
>>>> ## This example is from Rintro.pdf page 21 (R3.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 yaxis 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
>>>> ## yaxis 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 yaxis 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
>>>>
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


Duncan, thank you for locating the problem.
Martin, thank you for explaining the behavior and for the first pass
at fixing it.
With the fix, now the xaxis has ticks at all integers, and tick labels at
c(81,67,53,39,25,11,0,9,19,31,43,55,67,79)
This is with R3.3.2, as I interpret your fix to be to only the
Rintro.pdf manual with no change
to the code of any of the functions.
More work has to be done to repair the example.
I recommend
plot(as.numeric(fr) ~ as.numeric(names(fr)), type="h",
xlab="Determinant", ylab="Frequency")
The slightly more obvious solution doesn't work
> plot(fr ~ as.numeric(names(fr)), type="h", xlab="Determinant", ylab="Frequency")
Error in plot.table(c(81, 80, 79, 78, 77, 76, 75, 74, 73, 72, :
invalid table 'x'
## It is possible to change graphics:::Axis.table to
if (is.num) axis(side, ...)
## and that would make the xaxis for the determinant example
plot(fr, type="h", xlab="Determinant", ylab="Frequency")
## look sensible, but would
## be less appropriate for the following example.
## The current behavior of Axis.table makes sense in this example
tt < as.table(array(c(10,20,30), dimnames=list(c(100, 120, 200))))
tt
plot(tt)
On Mon, Jan 30, 2017 at 5:38 AM, Martin Maechler
< [hidden email]> wrote:
>>>>>> Duncan Murdoch < [hidden email]>
>>>>>> 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 Rintro  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 < [hidden email]> 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 < [hidden email]> wrote:
> >>>> ## This example is from Rintro.pdf page 21 (R3.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 yaxis 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
> >>>> ## yaxis 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 yaxis 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
> >>>>
>
> ______________________________________________
> [hidden email] mailing list  To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/rhelp> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html> and provide commented, minimal, selfcontained, reproducible code.
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


>>>>> Richard M Heiberger < [hidden email]>
>>>>> on Mon, 30 Jan 2017 10:19:53 0500 writes:
> Duncan, thank you for locating the problem.
> Martin, thank you for explaining the behavior and for the first pass
> at fixing it.
> With the fix, now the xaxis has ticks at all integers, and tick labels at
> c(81,67,53,39,25,11,0,9,19,31,43,55,67,79)
Note that *which* tick labels are shown depends quite a bit
on your graphics window width, your font sizes etc !
> This is with R3.3.2, as I interpret your fix to be to only the
> Rintro.pdf manual with no change
> to the code of any of the functions.
That's correct. If this is about improving any of
the base graphics functions, there's the Rdevel mailing list
and the bugzilla repository for "wishes"... rather than the
Rhelp list.
> More work has to be done to repair the example.
I strongly disagree:
The example (which does not even need a 'type = "h"', and no longer
uses it) now mentions that the plot.factor method is used.
... and I do like its graphics output, given the simplicity of
the plot() function call.
Code as the one below may be preferable in some cases, but not
there in the "Introduction to R".
> I recommend
> plot(as.numeric(fr) ~ as.numeric(names(fr)), type="h",
> xlab="Determinant", ylab="Frequency")
> The slightly more obvious solution doesn't work
>> plot(fr ~ as.numeric(names(fr)), type="h", xlab="Determinant", ylab="Frequency")
> Error in plot.table(c(81, 80, 79, 78, 77, 76, 75, 74, 73, 72, :
> invalid table 'x'
> ## It is possible to change graphics:::Axis.table to
> if (is.num) axis(side, ...)
> ## and that would make the xaxis for the determinant example
> plot(fr, type="h", xlab="Determinant", ylab="Frequency")
> ## look sensible, but would
> ## be less appropriate for the following example.
> ## The current behavior of Axis.table makes sense in this example
> tt < as.table(array(c(10,20,30), dimnames=list(c(100, 120, 200))))
> tt
> plot(tt)
Indeed. I doubt we would want to change Axis.table()
just because of examples like the determinant one....
(and then again: such considerations would be part of a new thread on Rdevel...)
Martin Maechler
> On Mon, Jan 30, 2017 at 5:38 AM, Martin Maechler
> < [hidden email]> wrote:
>>>>>>> Duncan Murdoch < [hidden email]>
>>>>>>> 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 Rintro  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 < [hidden email]> 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 < [hidden email]> wrote:
>> >>>> ## This example is from Rintro.pdf page 21 (R3.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 yaxis 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
>> >>>> ## yaxis 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 yaxis 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
>> >>>>
>>
>> ______________________________________________
>> [hidden email] mailing list  To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/rhelp >> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html >> and provide commented, minimal, selfcontained, reproducible code.
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.


I still think
plot(fr, xlab="Determinant", ylab="Frequency")
has a totally nonintuitive xaxis.
I recommend that the example in Rintro.pdf include an additional
sentence and option.
## In this example, where the xaxis is the entire set of integers 81:81,
## displaying them as an ordinary numeric axis might be preferable, in
which case use
plot(fr, xlab="Determinant", ylab="Frequency", xaxt="n")
axis(1)
While thinking on this, I looked at ?plot.table
The example
plot(table(state.division))
doesn't display most of the labels, and I think it therefore not a good example.
I recommend revising it, perhaps to
old.oma < par(oma=c(6,1,0,1));
plot(table(state.division), las=2, mgp=c(.5,2,0))
par(old.oma)
I agree the code for the legible labels is difficult to read.
Rich
On Mon, Jan 30, 2017 at 10:59 AM, Martin Maechler
< [hidden email]> wrote:
>>>>>> Richard M Heiberger < [hidden email]>
>>>>>> on Mon, 30 Jan 2017 10:19:53 0500 writes:
>
> > Duncan, thank you for locating the problem.
> > Martin, thank you for explaining the behavior and for the first pass
> > at fixing it.
>
>
> > With the fix, now the xaxis has ticks at all integers, and tick labels at
> > c(81,67,53,39,25,11,0,9,19,31,43,55,67,79)
>
> Note that *which* tick labels are shown depends quite a bit
> on your graphics window width, your font sizes etc !
>
> > This is with R3.3.2, as I interpret your fix to be to only the
> > Rintro.pdf manual with no change
> > to the code of any of the functions.
>
> That's correct. If this is about improving any of
> the base graphics functions, there's the Rdevel mailing list
> and the bugzilla repository for "wishes"... rather than the
> Rhelp list.
>
> > More work has to be done to repair the example.
>
> I strongly disagree:
> The example (which does not even need a 'type = "h"', and no longer
> uses it) now mentions that the plot.factor method is used.
> ... and I do like its graphics output, given the simplicity of
> the plot() function call.
>
> Code as the one below may be preferable in some cases, but not
> there in the "Introduction to R".
>
>
> > I recommend
> > plot(as.numeric(fr) ~ as.numeric(names(fr)), type="h",
> > xlab="Determinant", ylab="Frequency")
>
> > The slightly more obvious solution doesn't work
> >> plot(fr ~ as.numeric(names(fr)), type="h", xlab="Determinant", ylab="Frequency")
> > Error in plot.table(c(81, 80, 79, 78, 77, 76, 75, 74, 73, 72, :
> > invalid table 'x'
>
> > ## It is possible to change graphics:::Axis.table to
> > if (is.num) axis(side, ...)
> > ## and that would make the xaxis for the determinant example
> > plot(fr, type="h", xlab="Determinant", ylab="Frequency")
> > ## look sensible, but would
> > ## be less appropriate for the following example.
>
> > ## The current behavior of Axis.table makes sense in this example
> > tt < as.table(array(c(10,20,30), dimnames=list(c(100, 120, 200))))
> > tt
> > plot(tt)
>
> Indeed. I doubt we would want to change Axis.table()
> just because of examples like the determinant one....
> (and then again: such considerations would be part of a new thread on Rdevel...)
>
> Martin Maechler
>
>
> > On Mon, Jan 30, 2017 at 5:38 AM, Martin Maechler
> > < [hidden email]> wrote:
> >>>>>>> Duncan Murdoch < [hidden email]>
> >>>>>>> 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 Rintro  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 < [hidden email]> 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 < [hidden email]> wrote:
> >> >>>> ## This example is from Rintro.pdf page 21 (R3.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 yaxis 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
> >> >>>> ## yaxis 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 yaxis 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
> >> >>>>
> >>
> >> ______________________________________________
> >> [hidden email] mailing list  To UNSUBSCRIBE and more, see
> >> https://stat.ethz.ch/mailman/listinfo/rhelp> >> PLEASE do read the posting guide http://www.Rproject.org/postingguide.html> >> and provide commented, minimal, selfcontained, reproducible code.
______________________________________________
[hidden email] mailing list  To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/rhelpPLEASE do read the posting guide http://www.Rproject.org/postingguide.htmland provide commented, minimal, selfcontained, reproducible code.

