Thanks. That's helpful. I would be interested in the case where
1. one does not have a variable latticeplot, as per your example, but just has the output of xyplot(x ~ x | gl(2,1), layout = 1:2) sitting on the screen, having been "printed" by a prior function. We can assume that no other graphics have been issued since then. Can one still create a grey rectangle behind the lower panel? 2. In fact, ideally what I would like is to create a function, put.in.bg, say, that works something like this: xyplot(x ~ x | gl(2,1), layout = 1:2) trellis.focus("panel", 1, 1) put.in.bg(grid.rect(w = 0.5)) trellis.unfocus() or maybe xyplot(x ~ x | gl(2,1), layout = 1:2) trellis.focus.bg("panel", 1, 1) grid.rect(w = 0.5) trellis.unfocus() That allows one to add objects to a lattice panel behind the objects that are already there. This would also be helpful for adding grid lines afterwards or other lines, rectangles, etc. On 7/30/06, Paul Murrell <[EMAIL PROTECTED]> wrote: > Hi > > > Gabor Grothendieck wrote: > > I am trying to create a lattice plot and would like to later, i.e. after > > the plot is drawn, add a grey rectangle behind a portion of it. > > The following works except that the rectrangle is on top of and > > obscures a portion of the chart. I also tried adding col = "transparent" > > to the gpar list but that did not help -- I am on windows and > > perhaps the windows device does not support transparency? > > > Correct. > > > > At any rate, how can I place the rectangle behind the plotted > > points without drawing the rectangle first? > > > > library(lattice) > > library(grid) > > trellis.unfocus() > > x <- 1:10 > > xyplot(x ~ x | gl(2,1), layout = 1:2) > > trellis.focus("panel", 1, 1) > > grid.rect(w = .5, gp = gpar(fill = "light grey")) > > trellis.unfocus() > > > The user-interface is a little rough, but this can be done by accessing > the underlying grid objects. Here's an example, with explanatory bits > interspersed ... > > # "grab" the lattice plot as a grid gTree > # There are warnings, but they are ignorable > latticeplot <- grid.grabExpr(print(xyplot(x ~ x | gl(2,1), > layout = 1:2))) > > # Demonstrate that the gTree faithfully replicates the > # original lattice plot (not necessary, just to to what's going on) > grid.newpage() > grid.draw(latticeplot) > > # Explore the gTree (just to to show what's going on) > # Better user-interface would be nice here ... > childNames(latticeplot) > # Identify which children are which > # (appropriate grob names would be nice here) > lapply(latticeplot$children, class) > # Identify where each child is drawn > latticeplot$childrenvp > lapply(latticeplot$children, "[[", "vp") > > # Add a rect (starts off on top of everything else) > # NOTE that rect has to have correct vpPath > plotwithrect <- addGrob(latticeplot, > rectGrob(w = .5, gp = gpar(fill = "light grey"), > vp=vpPath("plot1.toplevel.vp", > "plot1.panel.1.1.vp"))) > > # Check this draws what we expect (just to show what's going on) > grid.newpage() > grid.draw(plotwithrect) > > # Reorder children to put rect at back > # Appropriate user-interface would be nice here ... > nc <- length(plotwithrect$childrenOrder) > plotwithrect$childrenOrder <- > plotwithrect$childrenOrder[c(nc, 1:(nc - 1))] > > # Final result > grid.newpage() > grid.draw(plotwithrect) > > Paul > -- > Dr Paul Murrell > Department of Statistics > The University of Auckland > Private Bag 92019 > Auckland > New Zealand > 64 9 3737599 x85392 > [EMAIL PROTECTED] > http://www.stat.auckland.ac.nz/~paul/ > > ______________________________________________ R-help@stat.math.ethz.ch 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.