Thanks Deepayan for your response.
The first subset you suggest was just a test for me and not what I
wanted.
I can't do your second suggested subset action as I wish to plot all the
panel data, but then add a coloured datapoint for just one year (see
example code).
I think I have found my problem but don't know how to solve it.
The subscripts of data going into each panel are almost always the same
length, except maybe one or two panels have 1 less datapoint.  
I've attached a script that builds a quick dataset and plots what I was
aiming for.  It works great.  If you then remove one line of data from
the DF (using "df<-df[-1,]" in the script), the plotting goes awry.

Any suggestions about dealing with unequal data lengths for panel
function subsetting?
Thanks so much
Michael

***********Start of code
#________________________
#This builds fake dataset

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)
#________________________

library(lattice)
df<-df[df$temp==4 ,]
df$year2<-as.factor(df$year)
df$week2<-as.factor(df$week)

#!!!!!!!!!!!!!!!!!
#df<-df[-1,]   #<-run this to see problem if panel data are of unequal
length
#!!!!!!!!!!!!!!!!!

print(xyplot(yvar~xvar|week2,data=df,layout = c(4, 5),
  scales=list(cex=0.7,x=list(rot=45)),
  par.strip=list(cex=.7),
  as.table=T,
  strip = strip.custom(strip.names = F, strip.levels = TRUE),
 panel=function(x,y,subscripts){
      panel.xyplot(x,y,type='p',col=1,cex=.5)
 
panel.xyplot(df$xvar[df$year==2005][subscripts],df$yvar[df$year==2005][s
ubscripts],type='p',pch=1,col=3,cex=1.5)
        },
))
***********End of code




-----Original Message-----
From: Deepayan Sarkar [mailto:[EMAIL PROTECTED] 
Sent: August 31, 2007 2:04 PM
To: Folkes, Michael
Cc: r-help@stat.math.ethz.ch
Subject: Re: [R] Lattice:can't subset in panel function using other
variables


On 8/30/07, Folkes, Michael <[EMAIL PROTECTED]> wrote:
> I've succeeded doing a subset within the panel function of xyplot - if
I'm subsetting based on either the value of 'x' or 'y' (e.g. below).
However, I wish to subset based on the value of another variable and
colour that one plotted point.  It's not working.  Either it doesn't
plot the coloured data point, or if I sort the data differently it
colours one datapoint, but the wrong one.   I assume this means it's not
getting the right subscripts?    Finally I can sort of see the light as
if I remove the conditioning variable (week) and subset before the
xyplot (e.g. week==1) to get just one panel, it plots the correct data
including the correct single red point.
> Where am I erring?
> _______________________________________
> print(xyplot(yval~xval|week,data=mydata,
>  panel=function(x,y,subscripts){
>         #panel.xyplot(x,y,type='p',col=1,cex=.5)
>         panel.xyplot(x[y<=40],y[y<=40],type='p',col=2,cex=.5)  #
<-----this works
>         
>
panel.xyplot(x[mydata$yr==2005],y[mydata$yr==2005],type='p',pch=16,col=2
,cex=.5)  #  <-----sometimes this won't work or it colours wrong
datapoint
> }))
> ___________________________

Why not

xyplot(yval~xval|week,data=mydata, subset = yval < 40)

or

xyplot(yval~xval|week,data=mydata, subset = yr==2005)

-Deepayan

______________________________________________
R-help@stat.math.ethz.ch 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.

Reply via email to