[R] gridBase and new.page() / grid.newpage()
Peter Cowan
cowan.pd at gmail.com
Sun Aug 10 23:02:50 CEST 2008
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 <p.murrell at auckland.ac.nz> 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 at 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
> paul at stat.auckland.ac.nz
> http://www.stat.auckland.ac.nz/~paul/
>
More information about the R-help
mailing list