Ky,
The error you report is a problem with the c() method for trellis
plots: it allows for a different panel function in each panel, but
only one prepanel function. Because of this, the
prepanel.default.levelplot function is not getting what it expects to
recompute the panel dimensions. It may be possible to extend the
function to handle this, but for now you have a few options:
(1) Set subscripts = TRUE in the xyplot:
p1 <- update(p1, subscripts = TRUE)
update(c(p2, p1, x.same = TRUE), layout = c(1, 2))
(2) Put the xyplot first, but then re-order the panels by indexing:
update(c(p1, p2, x.same = TRUE), layout = c(1, 2))[2:1]
(3) Take out the x.same=TRUE argument, if you can set the x scales to
be the same beforehand. In your example, the xyplot and levelplot had
the same x axis limits anyway, but presumably that is not the case in
your real problem.
update(c(p2, p1), layout = c(1, 2))
(4) Use a completely different mechanism: draw the two plots in the
desired position (after setting the x axes to be identical beforehand,
if desired). See ?plot.trellis
This latter mechanism was designed in to trellis from the
beginning, whereas the c() method is basically a hack. It also has the
advantage of retaining complete control over each plot independently.
By the way, I can't understand what you are trying to do with the
par.settings$layout.width argument. It doesn't seem to have any
effect. Ditto for the 'y = c(1/4, 3/4))' argument.
> Also, I seem to have lost control of par settings such as las = 1
This is a "base graphics" (?par) parameter, which does not apply to
grid or lattice graphics. The equivalent of "las" in lattice is the
scales$rot argument. See ?xyplot
Hope that helps
-Felix
2009/9/26 Ky Mathews <k.mathews at usyd.edu.au>:> Dear R-users,
>
> I'd like to place an xyplot() at the top of a page and a levelplot() at
the bottom of the same page, and have the x-axes be the same.
>
> I've come close to finding a solution through Rarchive, and can produce
an upside-down version of what I'd like (levelplot() on the top - see code
below).
>
> However, the following error occurs when I try and plot the xyplot() at the
top:
>
> "Error in prepanel.default.function(x = 0:10, y = c(0, 1, 4, 9, 16,
25,? :
> ? element 1 is empty;
> ?? the part of the args list of 'length' being evaluated was:
> ?? (subscripts)"
>
> Any pointers in the right direction would be much appreciated.
>
> #OS: Windows XP 2002 SP3; R: 2.9.2; lattice 0.17-25; latticeExtra 0.6-1
>
> Thanks and regards,
> Ky
>
> ###########################################################
> #Rcode for xyplot and lattice plot on the same page.
> library(lattice)
> library(latticeExtra)
>
> ?#xyplot
> ?x1 <- 0:10
> ?x2 <- x1^2
>
> ?p1 <- xyplot(x2 ~ x1
> ????????? , par.settings = list(layout.width = list(panel=1,? ylab = 2
> ????????? , axis.left =1.0, left.padding=1
> ????????? , ylab.axis.padding=1, axis.panel=1)))
>
>
> ?#levelplot
> ?y.df <- data.frame(y1 = rep(x1, times = 3)
> ????????????????? , y2 = rep(c('E1', 'E2', 'E3'),
each = length(x1))
> ????????????????? , y3 = c(x1, x1+2, x1-1))
> ?p2 <- levelplot(y3 ~ y1*y2, data = y.df,
> ??????????????? , par.settings = list(layout.width = list(panel=1,? ylab =
2
> ??????????????? , axis.left =1.0, left.padding=1
> ??????????????? , ylab.axis.padding=1, axis.panel=1)))
>
> #Printing the plots on the same page
> #This is what I found on an Rarchive post (thank-you)
> ?#it works if the levelplot (p2) is at the top of the page
> ?#i.e.
> ? update(c(p1, p2, x.same = TRUE)
> ?????????? , layout = c(1, 2)
> ?????????? , ylab = list(c("p1", "p2")
> ?????????? , y = c(1/4, 3/4))
> ?????????? , par.settings = list(layout.heights = list(panel = c(1, 1))))
>
> ?#however, the following error appears if the order is reversed (which is
what I would like)
> ?update(c(p2, p1, x.same = TRUE)
> ?????????? , layout = c(1, 2)
> ?????????? , ylab = list(c("p2", "p1")
> ?????????? , y = c(1/4, 3/4))
> ?????????? , par.settings = list(layout.heights = list(panel = c(1, 1))))
>
> The following error appears:
> #Error in prepanel.default.function(x = 0:10, y = c(0, 1, 4, 9, 16, 25,? :
> #? element 1 is empty;
> #?? the part of the args list of 'length' being evaluated was:
> #?? (subscripts)
>
> Also, I seem to have lost control of par settings such as las = 1
>
> #-----------------------------------------------------------
> Dr Ky L. Mathews
> Co-ordinator, CIMMYT ICARDA Communications Project
> Research Fellow,
> Plant Breeding Institute, The University of Sydney, Australia
>
> ______________________________________________
> 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.
>
--
Felix Andrews / ???
Postdoctoral Fellow
Integrated Catchment Assessment and Management (iCAM) Centre
Fenner School of Environment and Society [Bldg 48a]
The Australian National University
Canberra ACT 0200 Australia
M: +61 410 400 963
T: + 61 2 6125 1670
E: felix.andrews at anu.edu.au
CRICOS Provider No. 00120C
--
http://www.neurofractal.org/felix/