Same reason.
grid() is part of base graphics, which are incompatible with grid graphics.
Perhaps you want grid.grill(), which you could find out about in the grid
graphics vignette mentioned earlier.
---------------------------------------------------------------------------
Jeff Newmiller The ..... ..... Go Live...
DCN:<jdnewmil at dcn.davis.ca.us> Basics: ##.#. ##.#. Live Go...
Live: OO#.. Dead: OO#.. Playing
Research Engineer (Solar/Batteries O.O#. #.O#. with
/Software/Embedded Controllers) .OO#. .OO#. rocks...1k
---------------------------------------------------------------------------
Sent from my phone. Please excuse my brevity.
Marius Hofert <marius.hofert at math.ethz.ch> wrote:
Dear Paul,
Thank you for helping. This works great.
I then tried to put in a grid (via grid()). Why does that fail?
Cheers,
Marius
require(grid)
require(gridBase)
pdf(file="Rplot.pdf", width=8, height=8, onefile=FALSE)
## set up the grid layout
plot.new() # start (empty) new page with 'graphics'
gl <- grid.layout(5, 5, widths=unit(c(1.8, 8, 0.8, 8, 0.8), "cm"),
heights=unit(c(0.8, 8, 0.8, 8, 1.5), "cm"))
pushViewport(viewport(layout=gl))
## plot data
par. <- par(no.readonly=TRUE) # save plot settings
for(i in 1:2) { # rows
i. <- if(i > 1) i+2 else i+1 # jumping over gaps
for(j in 1:2) { # columns
j. <- if(j > 1) j+2 else j+1 # jumping over gaps
pushViewport(viewport(layout.pos.row=i., layout.pos.col=j.))
grid.rect(gp=gpar(fill="gray90")) # background
par(plt=gridPLT())
## plot
par(new=TRUE) # always do this before each new 'graphics' plot
grid(col=1)
plot(1:10, 1:10, log="y", xlab="", ylab="",
xaxt=if(i==2) "s" else "n", yaxt=if(j==1) "s" else "n")
upViewport()
}
}
par(par.)
dev.off()
Paul Murrell <paul at stat.auckland.ac.nz> writes:
Hi
On 24/09/12 09:36, Marius Hofert wrote:
Hi,
Why does the upper left panel (in the plot below) not have a gray
That is a symptom of the conflict that occurs when the 'graphics'
the 'grid' package both try to initialise a new page.
A good rule of thumb is to start a new page with 'graphics' first and
grid' stuff ('grid' is better at sharing), so a minor adjustment to
would be (#PAUL marks the changes) ...
pdf(file="Rplot.pdf", width=8, height=8, onefile=FALSE)
#PAUL
# Start (empty) new page with 'graphics'
plot.new()
## set up the grid layout
gl <- grid.layout(5, 5, widths=unit(c(1.8, 8, 0.8, 8, 0.8), "cm"),
heights=unit(c(0.8, 8, 0.8, 8, 1.5), "cm"))
pushViewport(viewport(layout=gl))
## plot data
par. <- par(no.readonly=TRUE) # save plot settings
for(i in 1:2) { # rows
i. <- if(i > 1) i+2 else i+1 # jumping over gaps
for(j in 1:2) { # columns
j. <- if(j > 1) j+2 else j+1 # jumping over gaps
pushViewport(viewport(layout.pos.row=i., layout.pos.col=j.))
grid.rect(gp=gpar(fill="gray90")) # background
par(plt=gridPLT())
## plot
#PAUL
# ALWAYS do this before each new 'graphics' plot
par(new=TRUE)
plot(1:10, 1:10, log="y", xlab="", ylab="",
xaxt=if(i==2) "s" else "n", yaxt=if(j==1) "s" else "n")
upViewport()
}
}
par(par.)
dev.off()
Hope that helps.
Paul
Cheers,
Marius
require(grid)
require(gridBase)
pdf(file="Rplot.pdf", width=8, height=8, onefile=FALSE)
## set up the grid layout
gl <- grid.layout(5, 5, widths=unit(c(1.8, 8, 0.8, 8, 0.8), "cm"),
heights=unit(c(0.8, 8, 0.8, 8, 1.5), "cm"))
if(FALSE) grid.show.layout(gl)
pushViewport(viewport(layout=gl))
## plot data
par. <- par(no.readonly=TRUE) # save plot settings
for(i in 1:2) { # rows
i. <- if(i > 1) i+2 else i+1 # jumping over gaps
for(j in 1:2) { # columns
j. <- if(j > 1) j+2 else j+1 # jumping over gaps
pushViewport(viewport(layout.pos.row=i.,
grid.rect(gp=gpar(fill="gray90")) # background
par(plt=gridPLT())
## plot
plot(1:10, 1:10, log="y", xlab="", ylab="",
xaxt=if(i==2) "s" else "n", yaxt=if(j==1) "s" else
par(new=TRUE) # to be run after first plot
upViewport()
}
}
par(par.)
dev.off()