[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