R 在绘图中填充水平线上方和下方的区域

R 在绘图中填充水平线上方和下方的区域,r,plot,R,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") par(mfr

我想填充两条水平线上方和下方的区域

这就是我想到的:

 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")

par(mfrow=c(1,2))

x如果您仍然希望使用老式的
图形设备制作图形(
绘图
直线
直线
,等等-其他建议涉及
网格
系统衍生产品,如
ggplot2
),您可以尝试使用自定义剪辑区域,请参见
剪辑

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))

par(mfrow=c(1,2))

你的主要问题是你需要得到水平线和上面/下面的线之间的交点。这里的x值是您需要的。这将涉及一点计算。另外,请记住,可以在向量中使用NA值创建单独的完整多边形。不过,一旦你解决了这个问题,你可能会发现最简单的方法是为上面/下面的每个点制作单独的多边形。适应你的需要应该不难。我认为@gagolews-answer要优雅得多。我怀疑在空间绘图功能中可能也有一种有效的策略,因为它们允许计算交叉点,但我懒得尝试。