[R] shared axes in multipanel plot

Felix Andrews felix at nfrac.org
Mon Dec 14 23:58:32 CET 2009


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 <ggrothendieck at 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
> <ggrothendieck at 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.Young at math.mcmaster.ca> wrote:
>>>> On Mon, Dec 14, 2009 at 11:30 AM, Jennifer Young
>>>> <Jennifer.Young at 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 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 4670
E: felix.andrews at anu.edu.au
CRICOS Provider No. 00120C
-- 
http://www.neurofractal.org/felix/




More information about the R-help mailing list