# [R] Filled region on graph

Ross Ihaka ihaka at stat.auckland.ac.nz
Fri Nov 3 03:09:22 CET 2000

```On Thu, Nov 02, 2000 at 07:27:14PM -0500, Yves Gauvreau wrote:
> Hi,
>
> Say I'd like to fill in color or by hashing the region above 0.5 and
> below -0.5 in the following situation.
>
> > x <- seq(0,2*pi, length=100)
> > plot(x, sin(x), type="l")
> > # Now fill the top part and the bottom part

Like many other problems there is no high level solution and you have
to create your own.  The function "polygon" can be used to draw filled
polygons and it can be used to fill a polygon approximation to the area
you want filled.  (Hashing is on my TODO list, but its not close to
the top).

To start, we need the points where the line y==0.5 cuts the curve.
In the case you mention, it is easy to see that these points are

lower <- asin(0.5)
upper <- pi - asin(0.5).

More generally, you could determine the intersection points by root finding

lower <- uniroot(function(x) sin(x)-0.5, lower=0, upper=pi/2)\$root
upper <- uniroot(function(x) sin(x)-0.5, lower=pi/2, upper=pi)\$root

Now we just compute the appoximating polygon

x <- seq(lower, upper, length=100)
y <- sin(x)

and draw it

polygon(x, y, col = "hotpink")

So here a the full solution.

x <- seq(0,2*pi, length=100)
plot(x, sin(x), type="l")
lower <- uniroot(function(x) sin(x)-0.5, lower=0, upper=pi/2)\$root
upper <- uniroot(function(x) sin(x)-0.5, lower=pi/2, upper=pi)\$root
x <- seq(lower, upper, length=100)
y <- sin(x)
polygon(x,y,col="hotpink")
lower <- uniroot(function(x) sin(x)+0.5, lower=pi, upper=3*pi/2)\$root
upper <- uniroot(function(x) sin(x)+0.5, lower=3*pi/2, upper=2*pi)\$root
x <- seq(lower, upper, length = 100)
y <- sin(x)
polygon(x, y, col = "limegreen")

Ross
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._

```