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

Marius Hofert marius.hofert at math.ethz.ch
Mon Sep 24 08:42:40 CEST 2012


Dear Jeff,

Thanks for helping.

I thought that gridBase would take care of using simple 'graphics' and grid
plots (?)

I tried grid.grill, but it's not so trivial to set it up such that the grid is
drawn at the axis ticks.

Cheers,

Marius


Jeff Newmiller <jdnewmil at dcn.davis.CA.us> writes:

> 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