Brilliant! I've just ordered your book to learn more about lattice as its use is quite gripping despite a steep learning curve.

Many thanks,

baptiste


On 25 Aug 2008, at 23:07, Deepayan Sarkar wrote:

On Mon, Aug 25, 2008 at 4:47 AM, baptiste auguie <[EMAIL PROTECTED]> wrote:
Dear all,


I'm routinely using lattice and ggplot2, I wish to create a lattice theme that looks not too dissimilar to ggplot's defaults so I can include both
graphs in a document with a consistent look.

To illustrate my questions, consider the following example:

library(ggplot2)
library(lattice)

# example data
x <- seq(0, 10, len = 100)
y1 <- jitter(sin(x), 1000)
y2 <- 0.5*jitter(cos(x), 1000)

df <- melt( data.frame(x=x, one=y1, two=y2, condition1=factor(c("a",
"b")), condition2=factor(c("1","1", "2", "2"))),
                      id=c("x", "condition1", "condition2"))

# custom colors
myColors <- c( "#E41A1C", "#377EB8")

# here is the ggplot2 version
p <- qplot(x,value, data=df, facets = condition1 ~ condition2,
colour=variable)
p <- p + scale_colour_manual(values = myColors)
print(p)

# lattice version
lattice.options(default.theme = canonical.theme(color = T))
trellis.par.set("strip.border" = list(col="white"))
trellis.par.set("background" = list(col="white"))
trellis.par.set("axis.line" = list(col="darkgrey"))
trellis.par.set("strip.background" = list(col="darkgrey"))
trellis.par.set("plot.symbol" = list(col = myColors, pch=16, cex=0.8))


p2 <- xyplot(value ~ x | condition1 + condition2, data=df, groups =
variable,
      strip=strip.custom(which.given=1),
strip.left=strip.custom(which.given=2)  ,
     panel = function(x, y, ...) {
              panel.fill(grey(0.95), border="white")
              panel.grid(h=-1, v=-1, col="white", col.line="white",
lty=1, lwd=2.5)
       lpoints(x, y, pch=16, col=1:2, cex=1)
     },
key = simpleKey(levels(df$variable), space = "right"))

print(p2)

Several things resist me, I welcome any input,

- with two levels of facetting, i often find convenient to layout the graphs in a 2d, rectangular matrix, and have vertical and horizontal strips as in ggplot2. Using strip and strip.left as in the example above leaves some
blanks where the other strip is expected. Can this be tuned?

Yes; the simplest solution is to use the useOuterStrips() function
from latticeExtra.

- in addition to the main grid, I'd like to set a finer, secondary grid, that subdivides it in halves. I can't find how to do this using panel.grid

If you mean automatically, then panel.grid() allows you to specify the
'n' parameter to pretty(). This works for the x-axis in your example
(see below), but not the y-axis. For finer control, you need to
specify the locations explicitly (probably using panel.abline).

- the axes should be white, but trellis.par.set("axis.line" =
list(col="white")) removes the tick marks altogether. Is there a way to get rid off the line but keep the tick marks? There is a new setting for this in base graphics, I guess there must be one in lattice with an appropriate call
to grid?

There probably should be one (maybe called "axis.tick"), but there
isn't yet. A workaround is to use scales$col (see below).

- to clip the background color to the plotting region as opposed to the whole page, I use panel.fill, maybe there's a better way (a setting outside
the plotting function)?

Not really. You could change the default panel function if you want.

Here's a modified version of your example:

# lattice version
lattice.options(default.theme = canonical.theme(color = T))
trellis.par.set("strip.border" = list(col="white"))
trellis.par.set("background" = list(col="white"))
trellis.par.set("axis.line" = list(col="white"))
trellis.par.set("strip.background" = list(col="darkgrey"))
trellis.par.set("superpose.symbol" = list(col = myColors, pch=16, cex=0.8))

library(latticeExtra)

p2 <-
   xyplot(value ~ x | condition2 + condition1,
          data=df, groups = variable,
          panel = function(x, y, ...) {
              panel.fill(grey(0.95), border="white")
              panel.grid(h=-10, v=-10,
                         col="white",
                         lty=1, lwd=1)
              panel.grid(h=-5, v=-5,
                         col="white",
                         lty=1, lwd=2.5)
              panel.superpose(x, y, ...)
          },
          as.table = TRUE,
          between = list(x = 0.1, y = 0.1),
          scales = list(col = "darkgrey"),
          auto.key =
          list(space = "right", title = "variable"))

print(useOuterStrips(p2))

-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