[R] shading between two smoothed curves
Graves, Gregory
ggraves at sfwmd.gov
Fri Aug 14 21:28:00 CEST 2009
Here is the solution for a shading between two curves. [much thanks to W.D.)
attach(cars)
#put 2 curves on the graph
scatter.smooth(speed, dist+25,family = "gaussian",span = .3,xlim=c(3,25),type='n',ylim=c(0,120))
par(new=T)
scatter.smooth(speed, dist-5,family = "gaussian",span = .3,xlim=c(3,25),type='n',ylim=c(0,120))
#get the xy coords of the 2 curves
gg1<-loess.smooth(speed,dist+25,family = "gaussian",span = .3)
gg2<-loess.smooth(speed,dist-5,family = "gaussian",span = .3)
#stick the xy's into a dataframe and combine the 2 dataframes
DF1<-data.frame(gg1)
DF2<-data.frame(gg2)
DFnew<-do.call("rbind", list(DF1, DF2))
#add the shading
polygon(rbind(DF1, DF2[nrow(DF2):1,]), col="gray", border = "red")
Gregory A. Graves
Lead Scientist
Everglades REstoration COoordination and VERification (RECOVER)
Watershed Division
South Florida Water Management District
Phones: DESK: 561 / 682 - 2429
CELL: 561 / 719 - 8157
-----Original Message-----
From: Graves, Gregory
Sent: Friday, August 14, 2009 1:38 PM
To: r-help at r-project.org
Subject: RE: [R] shading between two smoothed curves
Here is the solution for shading under a curve
attach(cars) #example dataset
scatter.smooth(speed, dist,family = "gaussian",span = .3, xlim=c(3,25), type='n') #plot a curve (smoothed line)
gg<-loess.smooth(speed,dist,family = "gaussian",span = .3) #put coordinates of smoothed line into 'gg'
DF<-data.frame(gg) #convert gg into a dataframe; this dataframe has 50 rows
DF[51,]<-c(25,0) #add a 51st row with the desired bottom right corner of the polygon under the curve
DF[52,]<-c(3,0) #add a 52nd row with the desired bottom left corner of the polygon under the curve
polygon(c(DF), col="gray", border = "red") # the shading
Here is NOT the solution for shading between 2 curves [I am going to use a crayon].
attach(cars)
#put 2 curves on the graph
scatter.smooth(speed, dist+25,family = "gaussian",span = .3,xlim=c(3,25),type='n',ylim=c(0,120))
par(new=T)
scatter.smooth(speed, dist-5,family = "gaussian",span = .3,xlim=c(3,25),type='n',ylim=c(0,120))
#get the xy coords of the 2 curves
gg1<-loess.smooth(speed,dist+25,family = "gaussian",span = .3)
gg2<-loess.smooth(speed,dist-5,family = "gaussian",span = .3)
#stick the xy's into a dataframe and combine the 2 dataframes
DF1<-data.frame(gg1)
DF2<-data.frame(gg2)
DFnew<-do.call("rbind", list(DF1, DF2))
#Arrrgh
polygon(c(DFnew), col="gray", border = "red")
Gregory A. Graves
Lead Scientist
Everglades REstoration COoordination and VERification (RECOVER)
Watershed Division
South Florida Water Management District
Phones: DESK: 561 / 682 - 2429
CELL: 561 / 719 - 8157
-----Original Message-----
From: Jim Lemon [mailto:jim at bitwrit.com.au]
Sent: Friday, August 14, 2009 8:47 AM
To: Graves, Gregory
Cc: r-help at r-project.org
Subject: Re: [R] shading between two smoothed curves
Graves, Gregory wrote:
> I will attempt to distill my problem down to a simpler one, the solution of which will hopefully lead me to the nirvana of complete understanding, i.e., inserting a polygon beneath an irregular line terminated by the x axis.
>
> I 'know' that polygon will work -provided- I knew the xy coordinates of the line(s) beneath which I desire to create the polygon. Unfortunately, I don't know how to get at that info.
>
> Below is an example of a irregular line for which the xy coordinates are not known (i.e., at least not by me). I assume my problem boils down to finding out how to extract the xy from that line.
>
> attach(cars)
> plot(dist ~ speed)
> scatter.smooth(speed, dist,family = "gaussian",span = .2)
>
>
>
>
Hi Gregory,
That's right, just call the underlying function (loess.smooth) and use
"str" on the result. There should be x and y components that can be
passed to "lines".
Jim
More information about the R-help
mailing list