[R] Overlaying lattice graphs (continued)

Sébastien pomchip at free.fr
Fri Jun 22 18:19:35 CEST 2007


Hi Deepayan,

The following code creates a dummy dataset which has the same similar as 
my usual datasets. I did not try to implement the changes proposed by 
Hadley, hoping that a solution can be found using the original dataset.

######### My code

# Creating dataset

nPts<-10            # number of time points
nInd<-6              # number of individuals
nModel<-3         # number of models

TimePts<-rep(1:nPts,nInd*nModel)                                    # 
creates the "Time" column
Coef<-rep(rnorm(6,0.1,0.01),each=nPts,nModel)             # Creates a 
vector of coefficients for generating the observations
Obs<-10*exp(-Coef*TimePts)                                         # 
creates the observations

for (i in 1:60){
Pred[i]<-jitter(10*exp(-Coef[i]*TimePts[i]))
Pred[i+60]<-jitter(5)
Pred[i+120]<-jitter(10-Coef[i+120]*TimePts[i])
}                                                                        
                  # creates the predicted values

colPlot<-rep(1,nPts*nInd*nModel)                                       
    # creates the "Plot" column
colModel<-gl(nModel,nPts*nInd,labels=c("A","B","C"))             # 
creates the "Model" column
colID<-gl(nInd,nPts,nPts*nInd*nModel)                                 
      # creates the "ID" column

mydata<-data.frame(colPlot,colModel,colID,TimePts,Obs,Pred)              
              # creates the dataset
names(mydata)<-c("Plot","Model","Individuals","Time","Observed","Predicted")

# Plotting as indicated by Deepayan

xyplot(Observed + Predicted ~ Time | Individuals + Model,
      data = mydata,
      panel = panel.superpose.2, type = c("p", "l"),
      layout = c(0, nlevels(mydata$Individuals))) #,
      #<...>)

####### End of code

This codes is not exactly what I am looking for, although it is pretty 
close. In the present case, I would like to have a Trellis plot with 6 
panels (one for each individual), where the Observations and the 
Predicted are plotted as symbols and lines, respectively. All three 
models should be plotted on the same panel. Unfortunately, it looks to 
me as 3 successives xyplots are created by the code above but only the 
last one remains displayed. I tried to play with 
panel.superpose,panel.superpose.2 and type, without much success.

I also tried the following code that creates 18 panels and distinguish 
all (Individuals,Model) couples... so, not what I want.

xyplot(Observed + Predicted ~ Time | Individuals+Model, data = mydata,
     type = c("p", "l"), distribute.type = TRUE)

Sebastien


Deepayan Sarkar a écrit :
> On 6/21/07, Sébastien <pomchip at free.fr> wrote:
>> Hi Hadley,
>>
>> Hopefully, my dataset won't be too hard to changed. Can I modify the
>> aspect of each group using your code (symbols for observed and lines for
>> predicted)?
>>
>> Sebastien
>>
>> hadley wickham a écrit :
>> > Hi Sebastian,
>> >
>> > I think you need to rearrange your data a bit.  Firstly, you need to
>> > put observed on the same footing as the different models, so you would
>> > have a new column in your data called value (previously observed and
>> > predicted) and a new model type ("observed").  Then you could do:
>
> Yes, and ?make.groups (and reshape of course) could help with that.
> This might not be strictly necessary though.
>
> However, I'm finding your pseudo-code confusing. Could you create a
> small example data set that can be used to try out some real code?
> Just from your description, I would have suggested something like
>
> xyplot(Observed + Predicted ~ Time | Individuals + Model,
>       data = mydata,
>       panel = panel.superpose.2, type = c("p", "l"),
>       layout = c(0, nlevels(mydata$Individuals)),
>       <...>)
>
> If all you want is to plot one page at a time, there are easier ways 
> to do that.
>
> -Deepayan
>
>> >
>> > xyplot(value ~ time | individauls, data=mydata, group=model)
>> >
>> > Hadley
>> >
>> >
>> > On 6/21/07, Sébastien <pomchip at free.fr> wrote:
>> >> Dear R Users,
>> >>
>> >> I recently posted an email on this list  about the use of 
>> data.frame and
>> >> overlaying multiple plots. Deepayan kindly indicated to me the
>> >> panel.superposition command which worked perfectly in the context 
>> of the
>> >> example I gave.
>> >> I'd like to go a little bit further on this topic using a more 
>> complex
>> >> dataset structure (actually the one I want to work on).
>> >>
>> >>  >mydata
>> >>       Plot    Model    Individuals    Time        Observed
>> >> Predicted
>> >> 1    1        A           1                  0.05
>> >> 10                    10.2
>> >> 2    1        A           1                  0.10
>> >> 20                    19.5
>> >> etc...
>> >> 10  1        B           1                  0.05         10
>> >>          9.8
>> >> 11  1        B           1                  0.10         20
>> >>          20.2
>> >> etc...
>> >>
>> >> There are p "levels" in mydata$Plot, m in mydata$Model, n in
>> >> mydata$Individuals and t in mydata$Time (Note that I probably use the
>> >> word levels improperly as all columns are not factors). Basically, 
>> this
>> >> dataset summarizes the t measurements obtained in n individuals as 
>> well
>> >> as the predicted values from m different modeling approaches 
>> (applied to
>> >> all individuals). Therefore, the observations are repeated m times in
>> >> the Observed columns, while the predictions appears only once for a
>> >> given model an a given individual.
>> >>
>> >> What I want to write is a R batch file creating a Trellis graph, 
>> where
>> >> each panel corresponds to one individual and contains the 
>> observations
>> >> (as scatterplot) plus the predicted values for all models (as 
>> lines of
>> >> different colors)... $Plot is just a token: it might be used to not
>> >> overload graphs in case there are too many tested models. The fun 
>> part
>> >> is that the values of p, m, n and t might vary from one dataset to 
>> the
>> >> other, so everything has to be coded dynamically.
>> >>
>> >> For the plotting part I was thinking about having a loop in my code
>> >> containing something like that:
>> >>
>> >> for (i in 1:nlevels(mydata$Model)) {
>> >>
>> >> subdata<-subset(mydata,mydata$Model=level(mydata$Model)[i])
>> >> xyplot(subset(Observed + Predicted ~ Time | Individuals, data =
>> >> subdata)       #plus additionnal formatting code
>> >>
>> >> }
>> >>
>> >> Unfortunately, this code simply creates a new Trellis plot instead of
>> >> adding the model one by one on the panels. Any idea or link to a 
>> useful
>> >> command will wellcome.
>> >>
>> >> Sebastien
>> >>
>> >> ______________________________________________
>> >> R-help at 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.
>> >>
>> >
>> >
>>
>> ______________________________________________
>> R-help at 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.
>>



More information about the R-help mailing list