[R] Lattice - parallel: xlim and adding lines

Deepayan Sarkar deepayan at stat.wisc.edu
Wed Mar 30 02:10:28 CEST 2005


On Tuesday 29 March 2005 17:04, Sundar Dorai-Raj wrote:
> T.A.Wassenaar wrote on 3/29/2005 4:17 PM:
> > Hi Sundar,
> >
> > Thanks for the reply. And, oops, the panel.parallel.new shouldn't
> > be in there. That is a revised panel function to color according to
> > a group. As with strange, that would generally be 'not-expected',
> > i.e., in the present case, not having an x-axis running from -1 to
> > 1 for all ranges. I would at least expect to have zero in the
> > middle, 

Why???  Why on earth would [-1,1] be something you ``expect'' and [0,1] 
be something ``strange''? As far as I can see, neither are documented 
(and hence you shouldn't expect anything).

You can of course set 'xlim=c(0,1)', but the better way of doing that 
would have been 'scales=list(x = list(axs = "i")))'. Unfortunately, 
this doesn't currently work in 'parallel', which is a bug.

It's still not very clear to me what you want to.

> > but that is not so. Excuse me for not expanding 'strange' 
> > previously. I have read the guide.., some while ago.
> >
> > Thanks again,
> >
> > Tsjerk
>
> Tsjerk,
>
>  From panel.parallel, the x values are being scaled to c(0, 1)
>
> x <- (as.numeric(z[subscripts[i], , ]) - llim)/dif
>
> This puts the "Min" at x == 0 and the "Max" at x == 1 on the x-axis.
> If you want to leave it in the raw scale of the x, 

That doesn't really make sense. The whole point of a parallel plot is to 
show several variables (with different ranges) in a single plot with a 
common axis. This is done by transforming (shifting and linearly 
scaling) each variable to have a common range. As such, there's no 
'natural choice' for this common range, [0,1] is just as good as any 
other [a,b] for -Inf < a < b < Inf.

If you want to do something else, you might as well write your own 
prepanel and panel functions.

> you will have to 
> write your own panel and prepanel function, or simply determine what
> xlim = c(-1, 1) is in the scaled coordinates.
>
> E.g.
>
> lin.scale <- function(x, a = 0, b = 1, new.x = NULL) {
>    slope <- (b - a)/diff(range(x))
>    inter <- a - slope * min(x)
>    if(is.null(new.x)) {
>      inter + slope * x
>    } else {
>      inter + slope * new.x
>    }
> }
> xlim <- lin.scale(range(iris[1:4]), new.x = c(-2, 10))
> parallel(~ iris[1:4] | Species, iris, xlim = xlim)
>
> The next question would be how to set the x labels to something other
> than "Min" and "Max" because (to me) they appear to be hard-coded in
> parallel. I will leave that question to Deepayan.

My bad (relic of early days). I'll fix it so that they can be overridden 
by 'scales'.

> As for adding lines, you will also have to scale your reference line
> to the panel units. For my example, each panel has a x range of c(0,
> 1) and a y range of c(1, 4). E.g.
>
> my.panel.parallel <- function(z, subscripts, col =
> superpose.line$col, lwd = superpose.line$lwd,
>                                lty = superpose.line$lty, ...) {
>    superpose.line <- trellis.par.get("superpose.line")
>    panel.abline(v = 0.5, lwd = 3)
>    panel.parallel(z, subscripts, col, lwd, lty, ...)
> }
>
> HTH,
>
> --sundar
>
> > On Tue, 29 Mar 2005 14:42:05 -0600
> >
> >  Sundar Dorai-Raj <sundar.dorai-raj at pdf.com> wrote:
> >> T.A.Wassenaar wrote on 3/29/2005 2:17 PM:
> >>> Hi,
> >>>
> >>> I'm trying to set the minimum and maximum in a parallel plot, but
> >>> trying xlim=c(-1,1) gives strange results. Am I missing
> >>> something? The call I give is:
> >>>
> >>> parallel(~X[,c(6,9,12,15,18)]|X$ff,X,panel=panel.parallel.new,gro
> >>>ups=X$protein,layout=c(3,1),xlim=c(-1,1))
> >>>
> >>>
> >>> Besides, I would like to add a reference line to the plot, but
> >>> can't find how to do that.
> >>>
> >>> I hope someone can give me a hint or two.
> >>>
> >>> Thanks in advance,
> >>>
> >>> Tsjerk
> >>
> >> Tsjerk,
> >>
> >> I don't think you'll get much help without knowing, first, what
> >> "strange" means, and second, what "panel.parallel.new" does. And
> >> you can always add a reference line by using panel.abline in your
> >> panel function.
> >>
> >> And, from the signature:
> >>
> >> PLEASE do read the posting guide!
> >> http://www.R-project.org/posting-guide.html
> >>
> >> --sundar




More information about the R-help mailing list