I have a number of x, y observations (Time, Conc) for a number of Subjects (with subject number Subj) and Doses. I can plot the individual points with xyplot fine: xyplot(Conc ~ Time | Subj, Groups=Dose, data=myData, panel = function(x,y) { panel.xyplot(x, y) panel.superpose(???) # Needs more here } ) I also like to plot on each panel (there is one Subj per panel) a continuous curve with predictions that I can calculate from a rather complicated function: myPred <- (time, subj, dose) { returns predicted value of Conc for a given time, subj and dose } The predicted curves are different for each panel. How do I plot the predictions? I have tried to add panel.superinpose in the xyplot portion but can't link to the myPred function. I also know about panel.curve but couldn't make it work. My attempt is to calculate the predictions on the fly. Is this possible? Or do I need to calculate all predictions first and put the results in a data frame. Thanks for any help, Rene -- View this message in context: http://www.nabble.com/xyplot%3A-discrete-points-%2B-continuous-curve-per-panel-tf2818931.html#a7867892 Sent from the R help mailing list archive at Nabble.com.
Hi there is probably better solution but you can try to fiidle with this idea, which adds stight lines to each panel one after another. # based on Gabor Grothendieck's code suggestion # adds straight lines to panels in lattice plots addLine<- function(...) { tcL <- trellis.currentLayout() for(i in 1:nrow(tcL)) for(j in 1:ncol(tcL)) if (tcL[i,j] > 0) { trellis.focus("panel", j, i, highlight = FALSE) panel.abline(...) trellis.unfocus() } } You need to change panel.abline(...) part maybe to panel.curve or panel.segments or? HTH Petr On 13 Dec 2006 at 23:22, RMan54 wrote: Date sent: Wed, 13 Dec 2006 23:22:41 -0800 (PST) From: RMan54 <RMan54 at cox.net> To: r-help at stat.math.ethz.ch Subject: [R] xyplot: discrete points + continuous curve per panel> > I have a number of x, y observations (Time, Conc) for a number of > Subjects (with subject number Subj) and Doses. I can plot the > individual points with xyplot fine: > > xyplot(Conc ~ Time | Subj, > Groups=Dose, > data=myData, > panel = function(x,y) { > panel.xyplot(x, y) > panel.superpose(???) # Needs more here > } > ) > > I also like to plot on each panel (there is one Subj per panel) a > continuous curve with predictions that I can calculate from a rather > complicated function: > > myPred <- (time, subj, dose) { > returns predicted value of Conc for a given time, subj and dose > } > > The predicted curves are different for each panel. > > How do I plot the predictions? I have tried to add panel.superinpose > in the xyplot portion but can't link to the myPred function. I also > know about panel.curve but couldn't make it work. > > My attempt is to calculate the predictions on the fly. Is this > possible? Or do I need to calculate all predictions first and put the > results in a data frame. Thanks for any help, Rene -- View this > message in context: > http://www.nabble.com/xyplot%3A-discrete-points-%2B-continuous-curve-p > er-panel-tf2818931.html#a7867892 Sent from the R help mailing list > archive at Nabble.com. > > ______________________________________________ > 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.Petr Pikal petr.pikal at precheza.cz
Deepayan Sarkar
2006-Dec-14 20:39 UTC
[R] xyplot: discrete points + continuous curve per panel
On 12/13/06, RMan54 <RMan54 at cox.net> wrote:> > I have a number of x, y observations (Time, Conc) for a number of Subjects > (with subject number Subj) and Doses. I can plot the individual points with > xyplot fine: > > xyplot(Conc ~ Time | Subj, > Groups=Dose, > data=myData, > panel = function(x,y) { > panel.xyplot(x, y) > panel.superpose(???) # Needs more here > } > ) > > I also like to plot on each panel (there is one Subj per panel) a continuous > curve with predictions that I can calculate from a rather complicated > function: > > myPred <- (time, subj, dose) { > returns predicted value of Conc for a given time, subj and dose > } > > The predicted curves are different for each panel. > > How do I plot the predictions? I have tried to add panel.superinpose in the > xyplot portion but can't link to the myPred function. I also know about > panel.curve but couldn't make it work. > > My attempt is to calculate the predictions on the fly. Is this possible? Or > do I need to calculate all predictions first and put the results in a data > frame.Depends on how much work you are willing to do. There is no reason for panel.curve to not work, provided you give it a "curve" to plot. This is normally done in the form of a vectorized function of one variable, which will be called with a vector of values spanning the x-axis of your plot. It is your responsibility to construct such a function inside each panel (presumably it would involve your myPred function). The easy way, that generally works well for longitudinal data (with increasing x values within a panel), is to add a column of predicted values to your data frame. For most model fitting routines in R, the paradigm is: fm <- some.model(y ~ whatever, data = mydata, ...) mydata$fit <- fitted(fm) xyplot(y + fit ~ whatever, type = list("p", "l"), distribute.type = TRUE) A real example being: library(lme4) data(Oxboys, package = "nlme") Oxboys$fit <- fitted(lmer(height ~ age + (1|Subject), data = Oxboys)) xyplot(height + fit ~ age | Subject, Oxboys, type = c("p", "l"), distribute.type = TRUE, aspect = "xy") Things will be more complicated if you already have a grouping variable (the solution is to pass down the vector of fitted values to the panel function and use 'subscripts' to retrieve the ones that belong in the panel). -Deepayan