From ggrothendieck at gmail.com  Wed Jun  1 03:21:24 2005
From: ggrothendieck at gmail.com (Gabor Grothendieck)
Date: Wed Jun  1 03:21:33 2005
Subject: [Rd] Re: [R] Problem going back to a viewport with gridBase
In-Reply-To: <429CFA42.4080106@stat.auckland.ac.nz>
References: <971536df05053020191ebe8f44@mail.gmail.com>
	<429CEA59.7020206@stat.auckland.ac.nz>
	<971536df050531163353031d97@mail.gmail.com>
	<429CFA42.4080106@stat.auckland.ac.nz>
Message-ID: <971536df05053118215366e02c@mail.gmail.com>

[moved from r-help to r-devel]

On 5/31/05, Paul Murrell <p.murrell@auckland.ac.nz> wrote:

> >    # mm.row[j] gives the row in the layout of the jth cell
> >    # mm.col[j] gives the col in the layout of the jth cell
> >    mm <- matrix(seq(nr*nc), nr, nc)
> >    mm.row <- c(row(mm))
> >    mm.col <- c(col(mm))
> >
> >   # go to next cell in the array
> >    j <- j + 1 # increment position
> >   pushViewport(viewport(layout.pos.row = mm.row[j], layout.pos.col = mm.col[j]))
> >
> > Is that how to do it or is there some layout/mfcol-like way?
> 
> 
> That is how to do it.
> 
> As far as grid is concerned, all viewports are equal and grid has no
> idea whether a viewport corresponds to a "plot region" or a "margin" or
> whatever, so grid has no concept of which viewport is the "next" one to use.
> 

OK. Thanks.  One suggestion.  Maybe the cells in a layout could have
an order to them and there could be an optional argument that takes a linear
index directly allowing easy linear traversals:

for(i in seq(nr*nc)) {
   pushViewport(viewport(i)) # might need different syntax here
   xyplot(seq(i) ~ seq(i))
   popViewport()
}

and taking it one further perhaps 'with' could have a viewport method 
that automatically pushes the viewport on entry and pops or moves
up one level on exit reducing the above to:

for(i in seq(nr*nc)) with(viewport(i), xyplot(seq(i) ~ seq(i)))


[Rd] Re: [R] Problem going back to a viewport with gridBase
Gabor Grothendieck