Hello I apologize in advance if this question has already be posted on the list, although I could not find a relevant thread in the archives. I would like to overlay xyplots using different datasets for each plot. I typically work on the following data.frame (mydata) structure>mydataDrug Time Observed Predicted 1 A 0.05 10 10.2 2 A 0.10 20 19.5 etc... 100 B 0.05 11 12.7 101 B 0.10 35 36 etc... I want to plot the observed data as points and the predicted values as lines. If I use the following commands, I don't have the possibility to switch the "y" values from Observed for the scatterplot to Predicted for the line. xyplot(Observed ~ Time | Drug, data = mydata, panel = function(x,y, ...){ + panel.xyplot(x,y,...) + panel.xyplot(x,y,type="l",...)}) I wonder if this problem can be solved using the trellis.focus "family" commands but I have a hard time to understand how they work. Please, let me know if a thread have already addressed this question. Otherwise, I would grateful for any hint, comments or info you can provide. Thanks Sebastien
On 6/11/07, Seb <pomchip at free.fr> wrote:> Hello > > I apologize in advance if this question has already be posted on the > list, although I could not find a relevant thread in the archives. > > I would like to overlay xyplots using different datasets for each plot. > I typically work on the following data.frame (mydata) structure > > >mydata > Drug Time Observed Predicted > 1 A 0.05 10 10.2 > 2 A 0.10 20 19.5 > etc... > 100 B 0.05 11 12.7 > 101 B 0.10 35 36 > etc... > > I want to plot the observed data as points and the predicted values as > lines. If I use the following commands, I don't have the possibility to > switch the "y" values from Observed for the scatterplot to Predicted for > the line. > > xyplot(Observed ~ Time | Drug, data = mydata, panel = function(x,y, ...){ > + panel.xyplot(x,y,...) > + panel.xyplot(x,y,type="l",...)}) > > I wonder if this problem can be solved using the trellis.focus "family" > commands but I have a hard time to understand how they work. > > Please, let me know if a thread have already addressed this question. > Otherwise, I would grateful for any hint, comments or info you can provide.There are several possible solutions. In your case, the simplest one would be something like (see ?panel.superpose for explanation): xyplot(Observed + Predicted ~ Time | Drug, data = mydata, type = c("p", "l"), distribute.type = TRUE) This will work best if the Time values are ordered; otherwise you could use type = c("p", "a") instead, which will be a little slower. Let us know if this doesn't give you what you want, preferably with a reproducible example illustrating why. -Deepayan
On 6/12/07, Seb <pomchip at free.fr> wrote:> Hello > > I apologize in advance if this question has already be posted on the > list, although I could not find a relevant thread in the archives. > > I would like to overlay xyplots using different datasets for each plot. > I typically work on the following data.frame (mydata) structure > > >mydata > Drug Time Observed Predicted > 1 A 0.05 10 10.2 > 2 A 0.10 20 19.5 > etc... > 100 B 0.05 11 12.7 > 101 B 0.10 35 36 > etc... > > I want to plot the observed data as points and the predicted values as > lines. If I use the following commands, I don't have the possibility to > switch the "y" values from Observed for the scatterplot to Predicted for > the line. > > xyplot(Observed ~ Time | Drug, data = mydata, panel = function(x,y, ...){ > + panel.xyplot(x,y,...) > + panel.xyplot(x,y,type="l",...)}) > > I wonder if this problem can be solved using the trellis.focus "family" > commands but I have a hard time to understand how they work.Another approach would be to use ggplot, http://had.co.nz/ggplot2. Then your code might look something like: ggplot(mydata, aes(x=Time)) + geom_point(aes(y=Observed)) + geom_line(aes(y = Predicted)) + facet_grid(. ~ Drug) Hadley