2014-02-20 93 views
0

我的迴歸爲Observed,估計值爲(Est),如下面的head所示。將陰影區域添加到ggplot中的手動指定線

data <- structure(list(IndID = structure(c(1L, 2L, 3L, 5L, 6L, 7L, 8L, 
9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 
22L, 23L), .Label = c("CAL_F01", "CAL_F17", "CAL_F19", "CAL_F23", 
"CAL_F43", "CAL_M33", "CAL_M36", "COL_P01", "COL_P03", "COL_P05", 
"COL_P06", "COL_P07", "COL_P08", "COL_P09", "COL_P10", "COL_P12", 
"COL_P13", "PAT_F03", "PAT_F04", "PAT_F05", "PAT_M02", "PAT_M03", 
"PAT_M04"), class = "factor"), StudyArea = structure(c(1L, 1L, 
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 
3L, 3L, 3L, 3L), .Label = c("Cali", "Colo", "Pata"), class = "factor"), 
    Observed = c(22L, 50L, 8L, 54L, 30L, 11L, 90L, 53L, 9L, 42L, 
    72L, 40L, 60L, 58L, 20L, 37L, 50L, 67L, 20L, 19L, 58L, 5L 
    ), variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "PredKills", class = "factor"), 
    Est = c(28, 52, 6, 35, 31, 13, 80, 62, 4, 43, 66, 43, 55, 
    42, 20, 47, 36, 84, 20, 17, 36, 6), SE = c(3.50031581162016, 
    4.8742514125436, 1.20589766104628, 4.79430832229519, 3.87541734990744, 
    2.36031827307993, 6.35148447967163, 5.52456747941261, 1.60267125934065, 
    4.53967516735091, 6.61559705260502, 5.35175112687543, 5.89582419295991, 
    5.18042529534246, 3.43767468948519, 4.69809433696684, 3.80733165582324, 
    5.85520173339347, 3.151903629499, 2.64621136787301, 4.64130814363024, 
    1.41537000011436)), .Names = c("IndID", "StudyArea", "Observed", 
"variable", "Est", "SE"), row.names = c(1L, 2L, 3L, 5L, 6L, 7L, 
8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 
21L, 22L, 23L), class = "data.frame") 


> head(data) 
    IndID StudyArea Observed variable Est  SE 
1 CAL_F01  Cali  22 PredKills 28 3.500316 
2 CAL_F17  Cali  50 PredKills 52 4.874251 
3 CAL_F19  Cali  8 PredKills 6 1.205898 
5 CAL_F43  Cali  54 PredKills 35 4.794308 
6 CAL_M33  Cali  30 PredKills 31 3.875417 
7 CAL_M36  Cali  11 PredKills 13 2.360318 

該代碼使得下面的圖。

p2 <- ggplot(data, aes(x=Observed, y=Est, color=StudyArea)) 
p2+ geom_point(shape="*", size = 12) + 
    geom_abline(intercept =0, slope = 1, size = 1)+ 
    geom_errorbar(aes(x= Observed, ymin=Est-SE, ymax=Est+SE, color=StudyArea),width = 0.5,cex=1, lty=2)+ 
    scale_color_manual(values=c("red","blue","darkgreen"))+ 
    ylim(2,92)+ xlim(2,92) 

fig

,實線代表以一對一配合。即如果Obs = Est那麼點將落在線上。來自線路的殘差顯然是錯誤。

問題:如何將陰影區域添加到表示10%誤差的45度線。我想我需要按照at this SO post的建議使用geom_ribbon,但一直無法產生正確的結果。

ADDITION 陰影區域不應隨x或y軸的變化而變化,而應該在45度線上保持不變。

我想要保持x軸的值相同,並通過更改y軸值來遮蔽y大於Est的0.9和低於Est的區域。

這裏是我一直在努力添加一個比Est更低的0.9的代碼。

p2+ geom_point(shape="*", size = 12) + 
    geom_errorbar(aes(x= ObsKills, ymin=value-SE, ymax=value+SE, color=StudyArea),width = 0.5,cex=1, lty=2)+ 
    coord_cartesian(ylim=c(2,92), xlim=c(2,92))+ 
    scale_color_manual(values=c("red","blue","darkgreen"))+ 
    geom_abline(intercept =0, slope = 1, size = 1, col="red")+ 
    geom_abline(data=data.frame(x=seq(1,92,1),y=seq(1,92,1)), aes(x=x, y=y*0.9),lty=2, cex=1) 

隨着代碼的最後一行(從@BrodieG採取提示)創建新data.frame與鏡像ObservedEst數據值的seq。在aes函數中,我用0.9來代替y。在我看來,這條線應該比Est低0.9,而不是頂部。

我的希望是增加一條較低和較高的線,然後在它們之間形成陰影,儘管可能有更好的方法來做到這一點。

希望這個更清楚一點...

在此先感謝!

回答

1

這裏是一個實現,雖然我不知道我在做你想要什麼:

p2 <- ggplot(data, aes(x=Observed, y=Est, color=StudyArea)) 
p2+ 
    geom_ribbon(data=data.frame(x=c(0,100)), aes(x=x, ymin=x * .9, ymax=x * 1.1), fill="gray", inherit.aes=F, alpha=0.5) + 
    geom_abline(intercept =0, slope = 1, size = 1)+ 
    geom_point(shape="*", size = 12) + 
    geom_errorbar(aes(x= Observed, ymin=Est-SE, ymax=Est+SE, color=StudyArea),width = 0.5,cex=1, lty=2)+ 
    scale_color_manual(values=c("red","blue","darkgreen"))+ 
    coord_cartesian(ylim=c(2,92), xlim=c(2,92)) 

enter image description here

+0

我加入加成上述澄清。 –

+0

@ B.Davis,只需將'* .9'和'* 1.1'更改爲'+ - x',其中'x'是您想要的任何帶寬。我不知道如何解釋你的「10%錯誤」。應該是10%的意思? – BrodieG

+0

我已經添加了更多我希望清楚的細節。提前致謝。 –