Robert Buitenwerf
2008-Nov-15 14:25 UTC
[R] Lattice: groups and no groups with panel.superpose
Dear R listers, I am trying to create a lattice plot with independent regression lines per group for each panel, plus one overall regression line per panel. I succeed in having the separate regression lines for each group per panel, but I can't figure out how to add the overall regression line over all groups. I have learnt a lot from the list, but I can't find an example for what I want to do... with the following example data (from another post): years<-2000:2006 weeks<-1:20 yr<-rep(years,rep(length(weeks)*6,length(years))) wk<-rep(weeks,rep(6,length(weeks))) temp<-rep(4:9,length(years)*length(weeks)) yvar<-round(rnorm(length(years)*length(weeks)*6,mean=30,sd=4),0) xvar<-(rnorm(length(years)*length(weeks)*6)+5)/10 df<-data.frame(year=yr,week=wk,temp=temp, yvar=yvar, xvar=xvar) I get the regression lines per group for each panel using: xyplot(yvar~year|week,data=df,layout = c(4, 5), type='p', groups = temp , panel = panel.superpose, panel.groups = function(x, y, ..., lty) { panel.xyplot(x, y, ..., lty = lty) panel.abline(lm(y~x), lty=3, ...) }) And obviously the overall regression lines with: xyplot(yvar~year|week,data=df,layout = c(4, 5), type='p', panel = function(x, y, ...) { panel.xyplot(x, y, ...) panel.abline(lm(y~x)) }) Any advice on how to "merge" the output from the two above graphs would be greatly appreciated! Kind regards, Robert Buitenwerf Ecologist SAEON South Africa _________________________________________________________________ [[elided Hotmail spam]]
baptiste auguie
2008-Nov-15 16:59 UTC
[R] Lattice: groups and no groups with panel.superpose
Hi, I think the following code should do what you want, xyplot(yvar~year|week,data=df,layout = c(4, 5), type='p', groups = temp , panel = function(x, y, ...) { panel.superpose(x, y, ...) panel.abline(lm(y~x)) }, panel.groups = function(x, y, ..., lty) { panel.xyplot(x, y, ..., lty = lty) panel.abline(lm(y~x), lty=3, ...) }) Hope this helps, baptiste On 15 Nov 2008, at 14:25, Robert Buitenwerf wrote:> > Dear R listers, > > I am trying to create a lattice plot with independent regression > lines per group > for each panel, plus one overall regression line per panel. I > succeed in having > the separate regression lines for each group per panel, but I can't > figure out > how to add the overall regression line over all groups. I have > learnt a lot from > the list, but I can't find an example for what I want to do... > > with the following example data (from another post): > years<-2000:2006 > weeks<-1:20 > yr<-rep(years,rep(length(weeks)*6,length(years))) > wk<-rep(weeks,rep(6,length(weeks))) > temp<-rep(4:9,length(years)*length(weeks)) > yvar<-round(rnorm(length(years)*length(weeks)*6,mean=30,sd=4),0) > xvar<-(rnorm(length(years)*length(weeks)*6)+5)/10 > df<-data.frame(year=yr,week=wk,temp=temp, yvar=yvar, > xvar=xvar) > > I get the regression lines per group for each panel using: > > xyplot(yvar~year|week,data=df,layout = c(4, 5), > type='p', > groups = temp , > panel = panel.superpose, > panel.groups = function(x, y, ..., lty) { > panel.xyplot(x, y, ..., lty = lty) > panel.abline(lm(y~x), lty=3, ...) > }) > > And obviously the overall regression lines with: > > xyplot(yvar~year|week,data=df,layout = c(4, 5), > type='p', > panel = function(x, y, ...) { > panel.xyplot(x, y, ...) > panel.abline(lm(y~x)) > }) > > Any advice on how to "merge" the output from the two above graphs > would be > greatly appreciated! > > > Kind regards, > > Robert Buitenwerf > Ecologist > SAEON > South Africa > _________________________________________________________________ > [[elided Hotmail spam]] > > ______________________________________________ > 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._____________________________ Baptiste Augui? School of Physics University of Exeter Stocker Road, Exeter, Devon, EX4 4QL, UK Phone: +44 1392 264187 http://newton.ex.ac.uk/research/emag
Reasonably Related Threads
- by (tapply) and for loop differences
- using eval to handle column names in function calling scatterplot graph function
- Writing a helper function that takes in the dataframe and variable names and then does a subset and plot
- speed up process
- question about formula for lm