[R] Overlaying lattice graphs (continued)

Sébastien pomchip at free.fr
Fri Jun 22 22:42:13 CEST 2007


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