[R] Overlaying lattice graphs (continued)

hadley wickham h.wickham at gmail.com
Fri Jun 22 22:46:32 CEST 2007


Yes - you'll need ggplot2.

Hadley

On 6/22/07, Sébastien <pomchip at free.fr> wrote:
> Hadley,
>
> I have some troubles to run your code with ggplot version 0.4.1. Is the
> package ggplot2 mandatory ?
>
> Sebastien
>
> hadley wickham a écrit :
> > Hi Sebastian,
> >
> > I think the following does what you want:
> >
> > library(ggplot2)
> > names(mydata) <- tolower(names(mydata))
> >
> > obs <- rename(subset(mydata, model=="A", -predicted), c("observed" =
> > "value"))
> > obs$model <- factor("observed")
> > pred <- rename(mydata[, -5], c("predicted" = "value"))
> > all <- rbind(obs, pred)
> >
> > ggplot(all, aes(x = time, y = value, colour=model)) +
> > geom_point(data = subset(all, model != "Observed")) +
> > geom_line(data= subset(all, model == "Observed")) +
> > facet_grid(. ~ individuals)
> >
> > Hadley
> >
> > On 6/22/07, Sébastien <pomchip at free.fr> wrote:
> >> 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