[R] How to fill the aerea under a plot?

Martin Maechler maechler at stat.math.ethz.ch
Thu Jun 3 14:46:07 CEST 1999


>>>>> "Paul" == Paul Murrell <pm254 at medschl.cam.ac.uk> writes:

    Paul> hi
    >> I plot a function, e.g.
    >> plot(sin, -pi, 2*pi).
    >> 
    >> 
    >> Then I would like to have the aerea
    >> from the x-axis up to the graph
    >> from x ranging from -3 to 0, shaded
    >> red and the other part (x from 0 to 6) under
    >> the graph e.g. green or sth. like that..

    Paul> plot(sin, -pi, 2*pi) just draws a series of straight lines to
    Paul> approximate the sine curve (but enough lines so that it looks
    Paul> like a smooth curve).  one way to do what you want is to draw the
    Paul> lines yourself using polygon(), which can then be filled.  the
    Paul> code below gives an example for your case (there are two examples
    Paul> because i'm not sure what you mean by "from the x-axis up to the
    Paul> graph") ...

    Paul> plot(c(-pi, 2*pi), c(-1,1), type="n", ylab="sin(x)", xlab="x")
    Paul> x1 <- seq(-pi, 0, length=101)
    Paul> x2 <- seq(0, 2*pi, length=101)
    Paul> polygon(c(0, -pi, x1), c(0, 0, sin(x1)), col="red")
    Paul> polygon(c(0, 2*pi, x2), c(0, 0, sin(x2)), col="green")

    Paul> plot(c(-pi, 2*pi), c(-1,1), type="n", ylab="sin(x)", xlab="x")
    Paul> x1 <- seq(-pi, 0, length=101)
    Paul> x2 <- seq(0, 2*pi, length=101)
    Paul> polygon(c(0, -pi, x1), c(-1, -1, sin(x1)), col="red")
    Paul> polygon(c(2*pi, 0, x2), c(-1, -1, sin(x2)), col="green")

    Paul> unfortunately, i don't think there's an easier way.  

however, there *is*  --- using the much underused  `` type = "h" '' :

Either -- with "overplotting":

   plot(sin, -pi, 2*pi, type="h", col="green", n=801)
   plot(sin, 0,   2*pi, type="h", col="red"  , n=401, add=TRUE)

Or  (without "overplotting")

  plot(sin, -pi, 0,  type="h", col="green", n=401, 
	           xlim = c(-pi, 2*pi), ylim = c(-1,1))
  plot(sin, 0, 2*pi, type="h", col="red"  , n=401, add=TRUE)

{Even   xlab & ylab  are ok!}

Note however, that this is less efficient from a device-driver point of
view.  E.g. with postscript(),  The file sizes are
      7.1, 48.0 and 33.2 1000Bytes
for Paul's (first) example, my "overplotting" and "non-overplotting"
example, respectively.


Martin Maechler <maechler at stat.math.ethz.ch>	http://stat.ethz.ch/~maechler/
Seminar fuer Statistik, ETH-Zentrum SOL G1;	Sonneggstr.33
ETH (Federal Inst. Technology)	8092 Zurich	SWITZERLAND
phone: x-41-1-632-3408		fax: ...-1086			<><
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list