围绕一个geom_abline着色(或两个geom_abline之间的着色)

时间:2017-01-23 18:29:01

标签: r ggplot2

我正在尝试使用geom_abline()创建一个红色y = x + 0行的简单散点图。我还添加了两条围绕红色y = x + 0线的蓝线。这两条蓝线具有公式y = x-ciVal和y = x + ciVal,其中ciVal由用户定义。散射图中落在这两条蓝线之间的任何点都将被删除。我已经成功地使用了以下示例:

library(ggplot2)
set.seed(1)
x = runif(20,0,3)
y = runif(20,0,2)

ciVal <- 0.5
myMax = max(c(x,y))
myMin = min(c(x,y))

keep <- sign(resid(lm(y-x-ciVal ~ 0)))==1 | sign(resid(lm(y-x+ciVal ~ 0)))==-1

data <- data.frame(dp = paste0("DataPoint",1:sum(keep==TRUE)), x = x[keep], y = y[keep])
data$dp <- as.character(data$dp)

ggplot(data = data, aes(x=x,y=y)) + geom_point(size=0.5) + geom_abline(intercept = 0, color = "red", size = 0.25) + geom_abline(intercept = ciVal, color ="blue", size = 0.25) + geom_abline(intercept = -1*ciVal, color ="blue", size = 0.25) + scale_x_continuous(limits = c(myMin, myMax)) +
  scale_y_continuous(limits = c(myMin, myMax))

Example output

我现在要做的是增加情节的美感。也就是说,我只想在两条蓝线之间有一些阴影,而不是在红线周围有两条蓝线。两条蓝线本身是否仍然作为阴影的边界可以是两种方式,但我更喜欢将它们移除。

我不确定是否可以通过制作一个红色geom_abline()并简单地在其两侧添加一个常量阴影,或者如果我需要在两个蓝色geom_ablines()之间进行着色来实现此目的。

我见过类似的问题(r - ggplot2 - create a shaded region between two geom_abline layersshading area between two lines in r)。

但是,我不知道他们是否一定适用于这种情况。我很难为这种情况创建一个多边形,因为阴影区域离开了图的轴,我很难确定多边形的角,因为ciVal值可以改变(最大值和最小值) the)创建轴限制的数据。

我们非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

我认为您需要以下内容:

data <- data.frame(dp = paste0("DataPoint",1:sum(keep==TRUE)), x = x[keep], y = y[keep])
data$dp <- as.character(data$dp)
data2 <- data.frame(x = seq(myMin, myMax, 0.01), y = seq(myMin, myMax, 0.01))

ggplot(data = data, aes(x=x,y=y)) + 
  geom_point(size=2) + 
  geom_ribbon(data=data2, aes(x=x, ymin = y-ciVal, ymax = y+ciVal), fill = "lightgrey") +
  geom_abline(intercept = 0, color = "red", size = 0.25) + 
  geom_abline(intercept = ciVal, color ="blue", size = 0.25) + 
  geom_abline(intercept = -1*ciVal, color ="blue", size = 0.25) + 
  scale_x_continuous(limits = c(myMin, myMax)) +
  scale_y_continuous(limits = c(myMin, myMax)) +
  scale_x_continuous(expand = c(0, 0)) + scale_y_continuous(expand = c(0, 0))

enter image description here