在R中绘制两条线之间的阴影区域

17

例如,如果我需要在图表中阴影两个区域

x<-rep(1:10)
plot(x,type="h")

作为一个例子,我需要将1到3和7到10的区域阴影化。

我使用了这些命令,但是它省略了图形的线条。

usr <- par('usr')
rect(1, usr[3], 3, usr[4], col='green')

3
在绘制矩形之后,您可以重新绘制线条(使用"lines(x, type='h')");您可能还想在“rect()”调用中使用“border=NA”来消除边框。 - Ben Bolker
1
你可以使用rect(1, usr[3], 3, usr[4], col="#00FF0070")代替,因为"#00FF00"是绿色的,最后两个数字对应透明度,00表示完全透明,FF表示不透明。 - rawr
好的,你知道有什么不同的颜色吗? - user3478697
2
我知道所有的颜色!只需向下滚动并从此处复制函数“tcol”(从第489行开始)https://github.com/raredd/rawr/blob/master/R/utils.R - rawr
这里可以使用垂直的 abline,只要它停在 x 的高度即可。 - Rich Scriven
显示剩余2条评论
2个回答

15

如果我理解正确,你可以使用鲜为人知的panel.first=参数来实现你想要的效果,具体是在plot.default()函数中使用:

plot(x,type="h", 
     panel.first = {
         usr <- par('usr')
         rect(c(1,7), usr[3], c(3,10), usr[4], col='green', border=NA)
     })

或者,为了避免与par('usr')值的混淆,只需执行以下操作:

plot(x, type="h", 
     panel.first = rect(c(1,7), -1e6, c(3,10), 1e6, col='green', border=NA))

enter image description here


1
+1 太棒了!我经常使用 type='n' 来绘制阴影等,然后再使用 linespoints。这是一个要记住的技巧。我从来没有想过查看 ?plot.default,因此从未遇到过这个。 - jbaums
1
@jbaums 非常高兴听到您喜欢它。我只是花了时间回答,希望其他人能够找到它有用,所以听到有人确实受益了,尤其棒! - Josh O'Brien

5

看到了吗?多边形:

polygon( x = c(1,1,3,3,1), y=c( usr[1], x[1], x[3], usr[1], usr[1]) ,col="red")

> polygon( x = c(1,1,3,3,1), y=c( usr[1], x[1], x[3], usr[1], usr[1]) ,col="red")
> polygon( x = c(7,7,10,10,7), y=c( usr[2], x[7], x[10], usr[1], usr[1]) ,col="red")

我选择关闭多边形,但我记得你可以让它自动闭合。 enter image description here

1
是的,从help(polygon)中可以看出:假设多边形通过将最后一个点连接到第一个点来封闭。 - r2evans
3
我认为这并没有回答提问者的问题(他们已经成功使用了rect()函数),问题涉及如何将多边形/矩形图形放在绘图区域的前景并遮挡绘图。 - Ben Bolker
2
OP要求“将1到3和7到10的区域遮蔽”,我认为这实际上是非常模糊的,不清楚真正想要什么。我理解为绘制不规则多边形。显然,您和其他两个人认为它是不同的东西。我无法发表权威评论,因为我的网络接口的心灵读取装置似乎出了问题。 - IRTFM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接