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.math...@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@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.andr...@anu.edu.au
CRICOS Provider No. 00120C
-- 
http://www.neurofractal.org/felix/

______________________________________________
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