Paul, The real case is a function where I'd want to allow end users to pass an arbitrary plotting function to be a sub plot within a larger plot (e.g. the code that does the density plots would actually be passed as a parameter. I adapted my example to reflect this. I expect most of my end users to be unfamiliar with grid, yet familiar with base graphics.
Thanks, Peter Aplot <- function(){ par(plt = gridPLT(), new = TRUE) grid.rect(gp=gpar(fill="light grey")) dens <- density(rnorm(10)) plot.density(dens, axes = FALSE, mar = c(0,0,0,0), main = "", xlab = "", ylab = "") } myplot <- function(subplot) { grid.newpage() plot.new() n <- 10 datalayout <- grid.layout(ncol = 2, width = unit(c(1, 1/n), c('null', 'null'))) pushViewport(viewport(width = .8, height = .8, layout = datalayout)) grid.rect(gp=gpar(col="grey")) for(i in 1:n) { pushViewport(viewport( y = i/n - 0.5 / n, x = 1, height = unit(1/n, 'npc'), width = unit(1/n, 'npc'))) subplot() upViewport() } pushViewport(viewport(xscale = c(0, 1), layout.pos.col = 1)) grid.rect(gp=gpar(fill="grey")) grid.points() upViewport() upViewport() } myplot(Aplot) myplot(Aplot) pdf() myplot(Aplot) myplot(Aplot) dev.off() On Sun, Aug 10, 2008 at 1:48 PM, Paul Murrell <[EMAIL PROTECTED]> wrote: > Hi > > > Peter Cowan wrote: >> Hello all, >> >> I'm trying to write a function using the gridBase package. I'd like >> to push several base subplots to a larger plot constructed with grid. >> However, I'm having trouble getting consistent results when running >> the function when the plotting window (quartz) is closed, when it is >> left open and the plot function is repeated to the same window, and >> when the output is saved to a pdf, see the example below. In the case >> of the pdf plot pages are preceded by a blank page. However, leaving >> out either plot.new() or grid.newpage() each presents different >> problems. I looked through the R Graphics book and package vignette >> but didn't see this particular issue addressed. > > > There can be complications when both the 'graphics' package and the > 'grid' package try to start a new page. > > Before trying to untangle this particular example, is it possible to > side step the problem by drawing those density plots using a > grid-compatible system such as either lattice or ggplot ? > > Or, if the "real" case is as simple as this, perhaps even just > grid.lines() will do the job (?) > > Paul > > >> Thanks in advance, >> >> Peter >> >> myplot <- function() { >> grid.newpage() >> plot.new() >> n <- 10 >> datalayout <- grid.layout(ncol = 2, width = unit(c(1, 1/n), >> c('null', 'null'))) >> >> pushViewport(viewport(width = .8, height = .8, layout = datalayout)) >> grid.rect(gp=gpar(col="grey")) >> >> for(i in 1:n) { >> pushViewport(viewport( >> y = i/n - 0.5 / n, x = 1, >> height = unit(1/n, 'npc'), >> width = unit(1/n, 'npc'))) >> par(plt = gridPLT(), new = TRUE) >> grid.rect(gp=gpar(fill="light grey")) >> dens <- density(rnorm(10)) >> plot.density(dens, axes = FALSE, >> mar = c(0,0,0,0), main = "", xlab = "", ylab = "") >> upViewport() >> } >> pushViewport(viewport(xscale = c(0, 1), layout.pos.col = 1)) >> grid.rect(gp=gpar(fill="grey")) >> grid.points() >> upViewport() >> upViewport() >> } >> >> myplot() >> myplot() >> >> pdf() >> myplot() >> myplot() >> dev.off() >> >> ______________________________________________ >> R-help@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. > > -- > Dr Paul Murrell > Department of Statistics > The University of Auckland > Private Bag 92019 > Auckland > New Zealand > 64 9 3737599 x85392 > [EMAIL PROTECTED] > http://www.stat.auckland.ac.nz/~paul/ > ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.