[R] fill in area between 2 lines with a color

Marc Schwartz marc_schwartz at comcast.net
Sun Jul 20 18:58:35 CEST 2008


on 07/20/2008 11:34 AM David Freedman wrote:
> Hi - I'd like to have the area between 2 lines on a x-y plot be filled with
> grey, but I haven't had
> any luck using polygon or rect.  (In reality, I'd like to do this for twice
> - once for a low group and once for a high group - and then I'd like to plot
> a set of data points for a 'normal' group together with these 2 grey areas.)
> 
> Here's a simple example of the 2 lines:
>      
> age=1:10
> y.low=rnorm(length(age),150,25)+10*age
> y.high=rnorm(length(age),250,25)+10*age
> plot(age,y.high,type='n',ylim=c(100,400),ylab='Y Range',xlab='Age (years)')
> lines(age,y.low,col='grey')
> lines(age,y.high,col='grey')
> 
> Is it possible to fill the area between the 2 lines filled with, for
> example, 'grey30' ?
> 
> thanks very much in advance,
> David Freedman

Try this:


age=1:10

y.low=rnorm(length(age),150,25)+10*age

y.high=rnorm(length(age),250,25)+10*age

plot(age,y.high,type='n',ylim=c(100,400),ylab='Y Range',
      xlab='Age (years)')

lines(age,y.low,col='grey')
lines(age,y.high,col='grey')


polygon(c(age, rev(age), age[1]), c(y.low, rev(y.high), y.low[1]),
         col = "grey30")


What you essentially need to do is to 'walk' the boundary of the 
polygon, be sure to 'close' the open end by returning to the starting 
point, and then fill it.

HTH,

Marc Schwartz



More information about the R-help mailing list