我正在尝试使用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))
我现在要做的是增加情节的美感。也就是说,我只想在两条蓝线之间有一些阴影,而不是在红线周围有两条蓝线。两条蓝线本身是否仍然作为阴影的边界可以是两种方式,但我更喜欢将它们移除。
我不确定是否可以通过制作一个红色geom_abline()并简单地在其两侧添加一个常量阴影,或者如果我需要在两个蓝色geom_ablines()之间进行着色来实现此目的。
我见过类似的问题(r - ggplot2 - create a shaded region between two geom_abline layers和shading area between two lines in r)。
但是,我不知道他们是否一定适用于这种情况。我很难为这种情况创建一个多边形,因为阴影区域离开了图的轴,我很难确定多边形的角,因为ciVal值可以改变(最大值和最小值) the)创建轴限制的数据。
我们非常感谢任何建议。
答案 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))