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

Paul Murrell p.murrell at auckland.ac.nz
Wed Jun 8 05:12:29 CEST 2005


Hi


Gabor Grothendieck wrote:
> Here is the code once again.  This time I have supplied two 
> names methods and a getChildren.viewport function to 
> encapsulate the corresponding grid internals.  It would
> be easiest if grid provided these itself but in the absence
> of that this does encapsulate dependencies on grid
> internals to a well defined set of functions.   Note that
> names is only used in 'with' and 'with' will be eliminated
> once Deepayan adds the use.viewport= (or whatever
> its called) to print.   I am not sure from your response
> whether or not you intend to add these items to the grid
> API but in any case this provides an intermediate
> level of safety.


Yep, I've made a note to look at adding these to the grid API.
Thanks.

Paul


> library(grid)
> library(lattice)
> 
> pushLayout <- function(nr, nc, name="layout") {
>   pushViewport(viewport(layout=grid.layout(nr, nc), name=name))
>   for (i in 1:nr) {
>     for (j in 1:nc) {
>       pushViewport(viewport(layout.pos.row=i, layout.pos.col=j))
>       upViewport()
>     }
>   }
>   upViewport()
> }
> 
> names.vpPath <- names.viewport <- function(x) x$name
> 
> with.vpPath <- with.viewport <- function(data, expr, ...) {
>       # if data is a vpPath it cannot be ROOT since  
>       # NULL will never dispatch here
>       depth <- if (data$name == "ROOT") 0 else downViewport(names(data))
>       result <- eval.parent(substitute(expr))
>       upViewport(depth)
>       invisible(result)
> }
> 
> getChildren.viewport <- function(x) x$children
> 
> grid.newpage()
> 
> # specify number of cells to fill and number of rows
> n <- 5; nr <- 3
> 
> nc <- ceiling(n/nr)
> downViewport(pushLayout(nr, nc))
> 
> vpt <- current.vpTree(all = FALSE)
> for(k in 1:n) with(getChildren.viewport(vpt)[[k]],
>       print( xyplot(v ~ v, list(v = 1:k)), newpage = FALSE )
> )


-- 
Dr Paul Murrell
Department of Statistics
The University of Auckland
Private Bag 92019
Auckland
New Zealand
64 9 3737599 x85392
paul at stat.auckland.ac.nz
http://www.stat.auckland.ac.nz/~paul/



More information about the R-devel mailing list