Marius Hofert
2012-Sep-23 21:36 UTC
[R] Background color in a grid plot seems to interfere with plot()
Hi, Why does the upper left panel (in the plot below) not have a gray background? 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., layout.pos.col=j.)) 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 "n") par(new=TRUE) # to be run after first plot upViewport() } } par(par.) dev.off()
Paul Murrell
2012-Sep-23 22:54 UTC
[R] Background color in a grid plot seems to interfere with plot()
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 background?That is a symptom of the conflict that occurs when the 'graphics' package and 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 THEN add 'grid' stuff ('grid' is better at sharing), so a minor adjustment to your code 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., layout.pos.col=j.)) > 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 "n") > par(new=TRUE) # to be run after first plot > upViewport() > } > } > par(par.) > 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/