Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fill area above and below horizontal lines in plot

Tags:

plot

r

I would like to fill the area above and below the two horizontal lines.

This is what I have come up with:

Plot

 par(mfrow=c(1,2))
 x<-seq(1,24,1)
 y<-rnorm(24, 10, 2)

 for(i in 1:2) {
 plot(x,y,ylim=c(4,16))
 lines(x,y)
 abline(h=11)
 abline(h=9)}

 hyper<-y
 hyper[hyper<11]<-11
 polygon(x,hyper,col="gray")

My main problem is that the intersect with the horizontal line is not right.

like image 525
moabit21 Avatar asked May 17 '14 16:05

moabit21


1 Answers

If you still wish to make the figure with the old-school graphics facilities (plot, abline, lines, and so on - the other suggestions concern the grid system derivatives, like ggplot2), you may try to play with a custom clipping region, see ?clip:

an illustration

par(mfrow=c(1, 2))
x <- seq(1, 24, 1)
y <- rnorm(24, 10, 2)

# 1st plot
plot(x, y, ylim=c(4,16), type='o')

# 2nd plot
plot(x, y, type='n', ylim=c(4,16))

clip(x1=min(x),x2=max(x), y1=11, y2=max(y))
polygon(c(min(x), x, max(x)), c(min(y), y, min(y)), col="gray")

clip(x1=min(x),x2=max(x), y1=9, y2=min(y))
polygon(c(min(x), x, max(x)), c(max(y), y, max(y)), col="gray")

clip(par("usr")[1], par("usr")[2], par("usr")[3], par("usr")[4]) # reset clipping region
lines(x,y, type='o')
abline(h=c(9, 11))

First we set up the plot region with no plotting, then we set up two different clipping regions (into which we plot with grey fills), then we remove the clipping region and re-did plotting with lines and points.

like image 69
gagolews Avatar answered Sep 16 '22 14:09

gagolews