[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