I think the basic problem is that you are bringing in new data from outside the xyplot() call -- i.e `b2` and `baseline` -- and are then trying to plot that against the panel argument `x`. This is asking for trouble, as you have found, because `x` as passed to the panel function is modified by grouping, conditioning or subsetting operations.
If you are using outside data, it is best to define both the x and y values together. Alternatively, merge all the data into one object (a matrix in this case) and define the plot structure in the high-level plot call, so that all the data series are grouped or subsetted together. Hope that helps. -Felix 2009/12/15 Gabor Grothendieck <ggrothendi...@gmail.com>: > One resolution of the need to go outside of pnl would be to use this line: > > tt <- unique(x) > > in place of tt <- time(z). That would overcome the objection that the > pnl function is not self contained. > > On Mon, Dec 14, 2009 at 3:44 PM, Gabor Grothendieck > <ggrothendi...@gmail.com> wrote: >> Try this: >> You seem to have found a problem. At any rate try this instead: >> >> pnl <- function(x, y, ...) { >> tt <- time(z) >> y <- matrix(y, length(tt)) >> for(j in 1:ncol(y)) panel.plot.default(tt, y[,j], ...) >> panel.lines(tt, baseline, lwd = 2, col = grey(0.5)) >> panel.lines(tt, b2) >> } >> >> On Mon, Dec 14, 2009 at 3:19 PM, Jennifer Young >> <jennifer.yo...@math.mcmaster.ca> wrote: >>>> On Mon, Dec 14, 2009 at 11:30 AM, Jennifer Young >>>> <jennifer.yo...@math.mcmaster.ca> wrote: >>>>> splendid! >>>>> >>>>> This worked well, but there are two oddities that I can't resolve. >>>>> >>>>> 1. In the real data, the "baseline" is a cumulative probability plot >>>>> (from >>>>> simulations) rather than the straight line. The panel.lines plots this >>>>> curve, but seems to join the first and last points together. >>>>> panel.points(x, baseline, type="l") did the same. >>>>> I checked that the vector is indeed sorted properly, so I'm not sure why >>>>> it should connect the first point to the last. >>>> >>>> I can't reproduce the problem based on this description. >>> >>> sorry that was lazy of me. If you modify the code you gave me as follows >>> (with an extra line of the sqare root of "baseline", as an example) the >>> first and last points are joined. I didn't notice this before when >>> "baseline" was just a line. >>> >>> baseline <- (1:20)/20 >>> dat1 <- matrix(baseline,20,8) >>> dat <- dat1+matrix(rnorm(20*8)/30, 20,8) >>> b2<-sqrt(baseline) >>> pnl <- function(x, ...) { >>> panel.plot.default(x, ...) >>> panel.lines(x, baseline, lwd = 2, col = grey(0.5)) >>> panel.lines(x, b2) >>> } >>> nc <- ncol(dat) >>> screens <- rep(1:(nc/2), each = 2) >>> z <- zoo(dat) >>> colnames(z) <- paste("Group", screens) >>> xyplot(z, screens = screens , layout = c(2, 2), col = "black", lty = >>> 2, scales = list(y = list(relation = "same")), panel = pnl) >>> >>> >>>> >>>>> >>>>> 2. The screens are correctly labeled, but in the wrong order (left to >>>>> right, top to bottom: 3,4,1,2). Is this easily corrected? >>>> >>>> xyplot(..., as.table = TRUE) will give one reordering. >>>> >>>> Another possibility is: >>>> plt <- xplot(...) >>>> plt[ix] >>>> where ix is a permutation of 1:4 >>>> >>>>> >>> >>> as.table=TRUE did the trick thanks. >>> >> > > ______________________________________________ > 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 4670 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.