[R] dotplot (lattice) with panel.segments and groups

Deepayan Sarkar deepayan.sarkar at gmail.com
Fri Jul 7 20:53:10 CEST 2006


On 7/7/06, Sebastian Luque <spluque at gmail.com> wrote:
> Hi,
>
> The following produces almost exactly what I needed.  The problems are
> that the 'panel.dotplot' call (commented) generates the error 'Error in
> NextMethod("[") : argument "subscripts" is missing, with no default'.

It's just as it says: panel.dotplot wants a 'subscripts' argument when
'groups' is not null, and you have forgotten to give it one.

> The
> other problem is that the colors alternate between the levels of the 'site'
> variable, rather than 'year'.

It's doing what it's being told to do. You probably want something like

dotplot(site ~ yield | variety, data=barley,
        groups=year, yield2=barley$yield2,
        col=c("gray", "black"),
        panel = panel.superpose,
        panel.groups = function(x, y, subscripts, yield2, col, ...) {
            panel.xyplot(x, y, col = col, ...)
            panel.segments(x, y, yield2[subscripts], y, col = col)
        })

Note that you don't want to use panel.dotplot here as it would draw a
reference line both times. If you do want a reference line, add that
in the panel function.

The explicit use of 'col' should not have been necessary, i.e., the
following should have worked:

dotplot(site ~ yield | variety, data=barley,
        groups=year, yield2=barley$yield2,
        col=c("gray", "black"),
        panel = panel.superpose,
        panel.groups = function(x, y, subscripts, yield2, ...) {
            panel.xyplot(x, y, col = ...)
            panel.segments(x, y, yield2[subscripts], y, ...)
        })

I believe this doesn't work because of a grid bug. I'll take that up
in a separate thread.

-Deepayan

>
>
> barley$yield2 <- with(barley, yield + 5)
>
> dotplot(site ~ yield | variety, data=barley, groups=year,
>         yield2=barley$yield2, col=c("gray", "black"),
>         panel=function(x, y, subscripts, yield2, ...) {
>             ## panel.dotplot(x, y, ...)
>             panel.segments(x, as.numeric(y),
>                            yield2[subscripts], as.numeric(y), ...)
>         })
>
> R> sessionInfo()
> Version 2.3.1 (2006-06-01)
> i486-pc-linux-gnu
>
> attached base packages:
> [1] "methods"   "stats"     "graphics"  "grDevices" "utils"     "datasets"
> [7] "base"
>
> other attached packages:
>    chron  gmodels  lattice
>  "2.3-3" "2.12.0" "0.13-8"
>
>
> Can somebody please suggest how to properly make that 'panel.dotplot' call
> and set the 'col' argument?  Thanks in advance.



More information about the R-help mailing list