On Wed, 2006-05-24 at 18:51 +0200, Andreas Svensson wrote: > Hi > > In R, using plot(x,y) followed by abline(lm(y~x)) produces a graph > with a regression line spanning the whole plot . This means that the > line extends beyond the swarm of data points to the defined of default > plot region. With par(xpd=T) it will span the entire figure region. But > how can I limit a regression line to the data range, i.e between > (xmin,ymin) and (xmax,ymax)? > > Sorry for not knowing the lingo here. If you don't understand the > question, please run the following script: > > x1<-c(1,2,3,4) > x2<-c(5,6,7,8) > y1<-c(2,4,5,8) > y2<-c(10,11,12,16) > plot(x1,y1,xlim=c(0,10),ylim=c(0,20),col="blue") > points(x2,y2,col="red") > abline(lm(y1~x1),col="blue") > abline(lm(y2~x2),col="red") > > The resulting plot isn't very informative. There is no overlap in the > two groups of data, yet the two ablines overlap. > I instead want the blue line to go from (1,2) to (4,8) and the red line > from (5,10) to (8,16). > > So, how can I constrain the abline to the relevant region, i.e stop > abline from extrapolating beyond the actual range of data. > Or should I use a function line 'lines' to do this? > > Cheers > Andres
Try this instead of the two abline()'s: lines(x1, fitted(lm(y1 ~ x1)), col = "blue") lines(x2, fitted(lm(y2 ~ x2)), col = "red") The function fitted() will extract the model fitted y values from the lm() model object. See ?lines and ?fitted HTH, Marc Schwartz ______________________________________________ R-help@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