2017-01-23 3 views
0

geom_abline()を使用して、赤いy = x + 0行の単純な散布図を作成しようとしています。私はまた、赤いy = x + 0の線を囲む2つの青い線を追加しています。これらの2つの青い線は、式y = x-ciValとy = x + ciValを持ちます。ここで、ciValはユーザーによって定義されています。これらの2本の青線の間にある散布図内のドットはすべて削除されます。私が今やろうとしています何geom_abline(または2つの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

プロットの美学を高めるです:私はこれが正常に以下の例での作業は持っています。つまり、赤い線を囲む2つの青い線の代わりに、2つの青い線の間に何らかの種類の陰影が欲しいだけです。 2つの青い線自体がシェーディングの境界線として残っているかどうかはどちらでもありえますが、私はそれらを削除することを好みます。

赤いgeom_abline()を作成し、その両側に一定のシェードを追加するだけで、または2つの青の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 | sign(resid(lm(y-x + ciVal〜0)))== - 1'は冗長である。私があなたの意図に合っていれば '< - 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

関連する問題