0

How do plot multiple lattice plots onto a single lattice plot where the plots are generated using an lapply function?

The following is a demonstration of what I have tried so far using the built in mtcars dataset.

require(lattice)

response <- c("cyl","disp","hp","drat")

par(mfrow=c(2,2))

lapply(response, function(variable) {
  print(xyplot(mtcars$mpg ~ mtcars[variable]))
})

This produces the plots desired. However it seems to be ignoring the par(mfrow=c(2,2)) instruction and plotting each plot separately.

Richie Cotton
  • 118,240
  • 47
  • 247
  • 360
user2109248
  • 325
  • 1
  • 2
  • 6
  • `lapply` is designed to iterate over a list applying a function, where each return value is used as an entry in a returned list. If you aren't returning a value, `for` is more appropriate. – Matthew Lundberg May 20 '13 at 03:23
  • Yes. `grid` plotting functions do ignore `par(mfrow=.)`. Read the help page for `?Lattice` more carefully. – IRTFM May 20 '13 at 05:00

3 Answers3

3

If you really don't want to use the built-in facetting or viewport options of lattice, you can replicate the behavior of par(mfrow) with the following,

require(lattice)

response <- c("cyl","disp","hp","drat")

# save all plots in a list
pl <- lapply(response, function(variable) {
  xyplot(mtcars$mpg ~ mtcars[variable])
})

library(gridExtra)
# arrange them in a 2x2 grid
do.call(grid.arrange, c(pl, nrow=2))
baptiste
  • 75,767
  • 19
  • 198
  • 294
1

Your example is not how lattice is intended to be used (grid would be more appropriate).

Here is a lattice solution:

xyplot(mpg ~ cyl+disp+hp+drat,
       data=mtcars,
       groups=cyl+disp+hp+drat,
       scales=list(relation="free"),
       col="blue"
)

enter image description here

Matthew Lundberg
  • 42,009
  • 6
  • 90
  • 112
  • I realise that I am not using lattice to its full capability. However, the actual function I am using for plotting is very complex and the built in faceted graphics capabilities in lattice is insufficient for my purpose. The grid package, however, does solve my problem. – user2109248 May 20 '13 at 20:31
0

The multiplot function on this page is something I have used many times to get multiple plot objects on one page.

zap2008
  • 684
  • 1
  • 9
  • 24