[R] Background color in a grid plot seems to interfere with plot()

Jeff Newmiller jdnewmil at dcn.davis.CA.us
Mon Sep 24 08:22:46 CEST 2012


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
>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.
>>>
>
>______________________________________________
>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.



More information about the R-help mailing list