我想填补两条水平线上方和下方的区域.
这就是我想出的:

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")
Run Code Online (Sandbox Code Playgroud)
我的主要问题是与水平线的交叉不正确.
gag*_*ews 12
如果您仍然希望让与老派图中graphics的设施(plot,abline,lines,等等-其他建议关系到grid系统的衍生物,像ggplot2),您可以尝试使用自定义裁剪区域玩,看?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))
Run Code Online (Sandbox Code Playgroud)
首先我们设置没有绘图的绘图区域,然后我们设置两个不同的剪裁区域(我们用灰色填充绘制),然后我们删除剪裁区域并重新绘制线条和点.