ggplot2 - 两条垂直线之间的阴影区域

时间:2012-02-07 14:29:06

标签: r ggplot2

我正在使用ggplot2来创建一些相当简单的散点图。我目前使用两条简单的垂直线:

... + geom_vline(xintercept=159684.186,linetype="dotted",size=0.6)+
geom_vline(xintercept=159683.438,linetype="dotted",size=0.6)+ ...

有谁能告诉我如何遮蔽从Y轴顶部到X轴的这两条线之间的区域?

2 个答案:

答案 0 :(得分:45)

您可以使用geom_rect

... + geom_rect(aes(xmin=159683.438, xmax=159684.186, ymin=0, ymax=Inf))

x的两个值来自geom_vline次来电。使用ymin=0将其降为0; ymax=Inf将一直带到轴的顶部。如果您希望它一直向下到x轴而不是0,您可以使用ymin=-Inf

一些注意事项:

如果它早于geoms的顺序,那么它的效果最好,以便它首先/低于其他部分(尤其是散点图数据)。

您可以将fill调用之外的填充颜色(aes美学)设置为固定值。我还要将透明度(alpha)设置为0.5,这样它背后的东西(网格线,很可能,如果你把它作为第一个geom)仍然可以看到。

答案 1 :(得分:18)

如果您知道要遮挡的区域的坐标,则可能更容易使用annotate()。当我尝试使用geom_rect()时,我遇到了一些奇怪的渲染问题。

library(ggplot2)
data(mtcars)

ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point() +
     annotate("rect", xmin = 3, xmax = 4.2, ymin = 12, ymax = 21,
        alpha = .2)

我知道它本质上是一样的;我刚从here偶然发现了这个小故事。