# [R] xyplot() and controlling panel.polygon()

Michael Kubovy kubovy at virginia.edu
Fri Apr 27 21:12:49 CEST 2007

```Hi Deepayan,

Your solution works, anf the polygon are drawn where I wanted them to
go. I thought that I could figure out how to gain control over the
colors of the four ensuing polygons (I'm trying to get two lighter

I've tried, for example, to see if I could control the color of the
polyon outline, by adding border = 'red' to panel.polygon. That
didn't work. Does it work only in lpolygon()?

I often can figure things out on my own, but obviously there's
something fundamental that I'm not getting about inheritance and
passing in these sorts of objects. I've been trying to get it from
the help pages and from Murrell's book, but neither offers enough of
a cookbook for me to figure these things out. Is there something I

Thanks,
MIchael

On Apr 27, 2007, at 2:25 PM, Deepayan Sarkar wrote:

> On 4/27/07, Michael Kubovy <kubovy at virginia.edu> wrote:
>> Hi Deepayan,
>>
>> The following is drawing the same polygons in each panel. I'm trying
>> to get a different polygon (confidence band) for each group in each
>> panel. That's why I thought I would need to pass groups and
>> subscripts to the panel.groups
>>
>> est <- c(1:4, 3:6, 7, 9, 11, 13, 12, 15, 18, 21)
>> cond <- rep(c('a','b'), each = 8)
>> grp <- rep(c('I', 'II'), each = 4, 2)
>> x <- rep(c(.5, .7, .9, 1.1), 4)
>> upper <- est + 1
>> lower = est - 1
>> data <- data.frame(est = est, x = x, cond = cond, grp = grp, upper =
>> upper, lower = lower)
>>
>> my.panel.polygon <- function(..., font, fontface)
>> {
>>     panel.polygon(...)
>> }
>>
>> xyplot(est ~ x | cond, group = grp, data = data, type = 'b',
>>      panel = function(x, y, ...){
>>          panel.superpose(c(x, rev(x)), c(upper, rev(lower)),
>>              panel.groups = 'my.panel.polygon', default.units =
>> 'native', ...)
>>          panel.xyplot(x, y, ...)
>>      }
>> )
>>
>> It's pretty clear that panel.superpose is not getting its x and y
>> values after they are split by group and panel.
>
> You are not even trying to do that; you have
>
>  panel.superpose(c(x, rev(x)), c(upper, rev(lower)), <...>
>
> so your x=c(x, rev(x)) is not the same length as x (and
> subscripts), and your
> y = c(upper, rev(lower)) is not the same length as anything. Also,
> your upper and lower are being taken from the global env, not data
> (they happen to be the same, but since your data has them, I assume
> you want to use them).
>
> Perhaps you are looking for something like this:
>
>
> panel.bands <-
>    function(x, y, upper, lower,
>             subscripts, ..., font, fontface)
> {
>    upper <- upper[subscripts]
>    lower <- lower[subscripts]
>    panel.polygon(c(x, rev(x)), c(upper, rev(lower)), ...)
> }
>
> xyplot(est ~ x | cond, group = grp, data = data, type = 'b',
>       upper = data\$upper,
>       lower = data\$lower,
>       panel = function(x, y, ...){
>           panel.superpose(x, y, panel.groups = 'panel.bands', ...)
>           panel.xyplot(x, y, ...)
>       })
>
> -Deepayan

_____________________________
Professor Michael Kubovy
University of Virginia
Department of Psychology
USPS:     P.O.Box 400400    Charlottesville, VA 22904-4400
Parcels:    Room 102        Gilmer Hall