2017-01-23 34 views
0

我想用geom_abline()創建一個帶有紅色y = x + 0線的簡單散點圖。我還添加了兩條圍繞紅色y = x + 0線的藍色線條。這兩條藍線具有公式y = x-ciVal和y = x + ciVal,其中ciVal由用戶定義。落在這兩條藍線之間的散點圖中的任何點都被刪除。我有這樣的成功與下面的示例工作:在一個geom_abline周圍着色(或兩個geom_abline之間的陰影)

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值可以改變,最大值和最小值)創建軸限制的數據。

任何建議將不勝感激。

+1

這樣看來,代碼'保持< - 符號(渣油(LM(YX-ciVal〜0)))== 1 |符號(resid(lm(y-x + ciVal_0)))== - 1'是多餘的。如果我的意圖正確,keep < - abs(x - y)> = ciVal'就足夠了。 – echasnovski

+0

看起來正確!謝謝你注意到! – LanneR

回答

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

相關問題