Thanks Deepayan!

I neglected to mention that I would want to retain ticks as well for the boxed panel(s), so perhaps something like

xyplot(y ~ x|f,
      data = Data,
      layout=c(2,1),
      scales=list(relation="free",alternating=FALSE),
      par.settings = list(axis.line=list(col = "transparent")),
      axis = function(side, line.col, ...){
          bool <- panel.number() %in% c(1)
          axis.default(side = side,
                       line.col = if(bool) "black" else "transparent",
                       ...)
          if(side=="bottom" & bool) grid::grid.rect(gp=grid::gpar(lty=1))
      }
      )

However, I noticed that if my panel function is drawing beyond the border, that it overlaps with the rectangle drawn by the axis function. For example, if I add the panel function:

panel=function(x,y,...){
        panel.polygon(x = c(0.4,0.6,0.6,0.4),
                      y = c(-10,-10,10,10),
                      col = "yellow")
        panel.xyplot(x,y,...)
      }

then the bottom border on panel 1 is obscured...any suggestions?

Thanks again,
Ben

Deepayan Sarkar wrote:
On Fri, Apr 8, 2011 at 6:10 AM, Benjamin Tyner <bty...@gmail.com> wrote:
Hello,

In lattice, is there a way to customize the axis.line by panel? For example,
say I have two panels:

Data <- data.frame(x=runif(10),
                 y=rnorm(10),
                 f=gl(2,5)
                 )

library(lattice)
plot <- xyplot(y ~ x|f,
             data = Data,
             layout=c(2,1),
             scales=list(relation="free",alternating=FALSE),
             par.settings = list(axis.line=list(lwd=0))
             )

and desire lwd=0 for one panel and lwd=1 for the other. Can it be done?

No.

If not, can the desired behavior be mimicked by explicit use of (say)
grid::grid.rect() within the panel function?

Yes, but using the axis function would be better as panel function
clips by default (so technically only half of each line would be
visible).

xyplot(y ~ x|f,
       data = Data,
       layout=c(2,1),
       scales=list(relation="free",alternating=FALSE),
       par.settings = list(axis.line=list(col = "transparent")),
       axis = function(side, ...) {
           ## axis is called 4 times per panel; draw box only once
           if (side == "bottom")
           {
               box.lty <-
                   if (panel.number() %in% c(1)) # add others as needed
                       0
                   else
                       1
               grid::grid.rect(gp = grid::gpar(lty = box.lty))
           }
           axis.default(side = side, ...)
       })

-Deepayan

______________________________________________
R-help@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.

Reply via email to