Reputation: 659
I would like to fill the area above and below the two horizontal lines.
This is what I have come up with:
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.
Upvotes: 6
Views: 2061
Reputation: 13066
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
:
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.
Upvotes: 12