[R] circular reference lines in splom

Max Kuhn mxkuhn at gmail.com
Thu Jan 20 19:48:57 CET 2011


This did the trick:

panel.circ3 <- function(...)
  {
    args <- list(...)
    circ1 <- ellipse(diag(rep(1, 2)), t = 1)
    panel.xyplot(circ1[,1], circ1[,2],
                 type = "l",
                 lty = trellis.par.get("reference.line")$lty,
                 col = trellis.par.get("reference.line")$col,
                 lwd = trellis.par.get("reference.line")$lwd)
    circ2 <- ellipse(diag(rep(1, 2)), t = 2)
    panel.xyplot(circ2[,1], circ2[,2],
                 type = "l",
                 lty = trellis.par.get("reference.line")$lty,
                 col = trellis.par.get("reference.line")$col,
                 lwd = trellis.par.get("reference.line")$lwd)
    panel.xyplot(args$x, args$y,
                 groups = args$groups,
                 subscripts = args$subscripts)
  }


splom(~dat, groups = grps,
      lower.panel = panel.circ3,
      upper.panel = panel.circ3)


Thanks,

Max

On Thu, Jan 20, 2011 at 11:13 AM, Peter Ehlers <ehlers at ucalgary.ca> wrote:
> On 2011-01-19 20:15, Max Kuhn wrote:
>>
>> Hello everyone,
>>
>> I'm stumped. I'd like to create a scatterplot matrix with circular
>> reference lines. Here is an example in 2d:
>>
>> library(ellipse)
>>
>> set.seed(1)
>> dat<- matrix(rnorm(300), ncol = 3)
>> colnames(dat)<- c("X1", "X2", "X3")
>> dat<- as.data.frame(dat)
>> grps<- factor(rep(letters[1:4], 25))
>>
>> panel.circ<- function(x, y, ...)
>>   {
>>     circ1<- ellipse(diag(rep(1, 2)), t = 1)
>>     panel.xyplot(circ1[,1], circ1[,2],
>>                  type = "l",
>>                  lty = 2)
>>     circ2<- ellipse(diag(rep(1, 2)), t = 2)
>>     panel.xyplot(circ2[,1], circ2[,2],
>>                  type = "l",
>>                  lty = 2)
>>     panel.xyplot(x, y)
>>   }
>>
>> xyplot(X2 ~ X1, data = dat,
>>        panel = panel.circ,
>>        aspect = 1)
>>
>> I'd like to to the sample with splom, but with groups.
>>
>> My latest attempt:
>>
>> panel.circ2<- function(x, y, groups, ...)
>>   {
>>     circ1<- ellipse(diag(rep(1, 2)), t = 1)
>>     panel.xyplot(circ1[,1], circ1[,2],
>>                  type = "l",
>>                  lty = 2)
>>     circ2<- ellipse(diag(rep(1, 2)), t = 2)
>>     panel.xyplot(circ2[,1], circ2[,2],
>>                  type = "l",
>>                  lty = 2)
>>     panel.xyplot(x, y, type = "p", groups)
>>   }
>>
>>
>>
>> splom(~dat,
>>       panel = panel.superpose,
>>       panel.groups = panel.circ2)
>>
>> produces nothing but warnings:
>>
>>> warnings()
>>
>> Warning messages:
>> 1: In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL'
>>
>> It does not appear to me that panel.circ2 is even being called.
>>
>> Thanks,
>>
>> Max
>
> I don't see a function panel.groups() in lattice.
> Does this do what you want or am I missing the point:
>
>  splom(~dat|grps, panel = panel.circ2)
>
> Peter Ehlers
>



-- 

Max



More information about the R-help mailing list