用透明色标记绘图范围

时间:2017-03-22 15:19:37

标签: r ggplot2

我希望通过在ggplot2中填充(透明)颜色的某些x1到x2的完整区域来标记绘图的某些部分。 使用基数R我会做类似的事情:

plot(1:100)
polygon(x = c(0, 25, 25, 0), y = c(-1000, -1000, 1000, 1000), col = "#FF000050")

enter image description here

当对ggplot2做同样的事情时,我遇到的问题是,多边形要么没有进入绘图的上边缘,要么根本不绘制,如果我限制y轴则根本不绘制与ylim

ggplot(data = data.frame(x = 1:100, y = 1:100), aes(x = x, y = y)) +
  geom_point() + 
  #ylim(0, 100) +
  geom_polygon(data = data.frame(x = c(0, 25, 25, 0), y = c(-1000, -1000, 1000, 1000)), aes(x = x, y = y), color = "red", fill = "red", alpha = 0.1)

我不想将解决方案限制为geom_polygon,也许有更好的方法来标记这部分情节。在我的真实世界数据图中,我使用geom_bar作为堆积条形图,但我认为解决方案不依赖于此。

2 个答案:

答案 0 :(得分:3)

您可以使用-Inf+Inf来定义polygon的限制(或者更好,在这种情况下为rect)。
ggplot2会忽略它们来构建情节限制:

ggplot() +
    geom_point(data = data.frame(x = 1:100, y = 1:100), aes(x = x, y = y)) +     
    geom_polygon(data = data.frame(x = c(0, 25, 25, 0), y = c(-Inf, -Inf, Inf, Inf)), aes(x = x, y = y), color = "red", fill = "red", alpha = 0.1) +
    geom_rect(aes(xmin = 30, xmax = 35, ymin = -Inf, ymax = Inf), color = 'green',  fill = "green", alpha = .1)

请注意,我已将ggplot调用的数据分配移至geom_point。更好地解释了in this question的动机。

enter image description here

答案 1 :(得分:1)

试试这个:

ggplot(data = data.frame(x = 1:100, y = 1:100), aes(x = x, y = y)) +
  geom_rect(aes(xmin = 0, xmax = 25, ymin = 0, ymax = 100), fill = "red", alpha = 0.01)+
  geom_point()+
  scale_y_continuous(limits = c(0, 100), expand = c(0, 0))