Thanks Deepayan, works like a charm. A followup question though--I'd like to produce the same data on four panels with the final two "zoomed in", i.e. plotted with shorter x and y axes. Since I can't access panel.number in the prepanel function, and since updating the plot with lists of the new x and y axis ranges via xlim and ylim doesn't work (I think since I only actually have one repeated panel), I've tried a trick you mentioned elsewhere (http://tolstoy.newcastle.edu.au/R/e2/help/06/10/2621.html)--keeping a counter in the prepanel function. The following code snippet from xyplot doesn't work, however:
lattice.options(counter = 1) ... scales = list(relation = "free"), prepanel = function(...) { counter <- lattice.getOption("counter"); if(counter < 2) { list(xlim=range(0,1500), ylim = range(0, 4), dx = NULL, dy = NULL); lattice.options(counter = counter + 1) } else { list(xlim=range(0,500), ylim = range(0, 2), dx = NULL, dy = NULL); lattice.options(counter = counter + 1) } }, ... Only the first set of limits is respected, and counter equals 2 upon completion which implies that all of the axes are being drawn at once. I think I'm misunderstanding something. Thanks again, -Alex On Tue, Aug 26, 2008 at 6:02 PM, Deepayan Sarkar <[EMAIL PROTECTED]> wrote: > > On Tue, Aug 26, 2008 at 2:26 PM, Alex Karner <[EMAIL PROTECTED]> wrote: > > R Friends, > > > > I'm running R2.7.1 on Windows XP. > > > > I'm trying to get some lattice functionality which I have not seen > > previously documented--I'd like to plot the exact same data in multiple > > panels but changing the grouping variable each time so that each panel > > highlights a different feature of the data set. The following code does > > exactly that with a simple and fabricated air quality data set. > > > > dataSet <- data.frame("Pollutant"=c(rep("Black Carbon",5),rep("PM10",5)), > > "Detector"=c(1:5,1:5), "Value"=c(seq(50,10,-10),seq(100,60,-10)), > > "Class"="Mass") > > > > xyplot( > > Value ~ Detector | Pollutant, > > data=dataSet, > > aspect = 1.0, > > subscripts=TRUE, > > panel = function(x,y,subscripts,...) { > > if(panel.number() == 1) > > panel.superpose(x=dataSet$Detector,y=dataSet$Value,1:nrow(dataSet),groups=dataSet$Pollutant); > > if(panel.number() == 2) > > panel.superpose(x=dataSet$Detector,y=dataSet$Value,1:nrow(dataSet),groups=normToEdge_dataSet$Class); > > } > > ) > > > > Although the panel labels indicate that only one type of pollutant is > > displayed in each, I've instead forced all of the data to be plotted in > > both. The first panel shows two colors, grouped by pollutant, the second > > shows one color, grouped by class. > > > > Here's where the problem comes, if I add an additional pollutant, instead > > defining the data set as follows: > > > > dataSet <- data.frame("Pollutant"=c(rep("Black > > Carbon",5),rep("PM10",5),"Ultrafines"), > > "Detector"=c(1:5,1:5,10),"Value"=c(seq(50,10,-10),seq(100,60,-10),75),"Class"=c(rep("Mass",10),"Count")) > > > > and rerun the same plotting script, I obtain three panels. The one labeled > > "Black Carbon" correctly displays all three pollutants in different colors. > > "PM10" however, displays all classes in one color when there should now be > > two. Additionally, I now obtain a panel entitled "Ultrafines" which I'd like > > to suppress. > > > > The actual data set has a number of different pollutants, so what I'd > > ideally like to do is arbitrarily define two panels with different grouping > > variables. I've tried to set up dummy groups and to condition on those, but > > with no luck. I think what I need to do is possible with viewports, but is > > there no way to entice lattice to function in this way? > > > > Any help would be appreciated. > > Panels can be repeated, using the standard R indexing interface; so, > for example, > > ## trellis object with one panel, but different groups depending on > panel.number() > > p <- > with(dataSet, > xyplot(Value ~ Detector, > group.list = list(Pollutant, Class), > aspect = 1.0, > subscripts = TRUE, > panel = function(..., group.list) { > panel.xyplot(..., > groups = group.list[[panel.number()]]) > })) > > ## plot first panel twice > > p[c(1, 1)] > > > ## add a strip function > > update(p[c(1, 1)], > strip = function(...) { > lab <- c("Pollutant", "Class")[panel.number()] > strip.default(1, 1, var.name = "", factor.levels = lab) > }) > > -Deepayan ______________________________________________ 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.