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
Maybe Matching 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