2014-02-18 62 views
0

有沒有辦法限制ggplot中的abline或平滑線的數據範圍?例如指數分佈數據有時可有顯著鉛異常值,以及一個長,但相當不感興趣的尾巴:向ggplot添加自定義範圍的ab /平滑線

d = sort(rexp(100, rate = 1), decreasing=T) 
ggplot(NULL, aes(1:length(d), d)) + geom_point() + scale_y_log10() + geom_smooth(method = lm, se=F) 

enter image description here

藍線ggplot的,紅色的,我加入到展示我想通過將geom_smooth函數約束到一個12-80的x範圍來添加該行 - 例如,當計算特殊情況和長尾時,顯示變量之間可能存在假設關係的域。任何建議讚賞如何實現這一點。

+0

插圖畫家當然是一個選擇,但它會很高興geom_smooth的SE信心thingy在行動 – geotheory

回答

1

試試這個:不幸的是

library(ggplot2) 
set.seed(1) 
d <- sort(rexp(100, rate = 1), decreasing=T) 
gg <- data.frame(x=1:length(d),y=d 
       ) 
ggplot(gg, aes(x,y)) + 
    geom_point() + 
    scale_y_log10() + 
    geom_smooth(data=gg[gg$x>11 & gg$x<81,],method = lm, se=F) 

+0

斑點感謝。我確實嘗試用受限數據重複aes,但失敗了。不知道你可以像這樣管理數據。 – geotheory

0

,我沒有代表對@jlhoward的帖子發表評論,但我想問一下,如果以這種方式影響限制了數據的迴歸線的結果? 通過子集劃分,它是否在計算中排除點或只是對顯示的結果產生影響?

例如,我想執行以下操作:

# Adding "volume" to the diamonds data frame. 
diamonds$volume = diamonds$x * diamonds$y * diamonds$z 

ggplot(aes(x = volume, y = price), data = subset(diamonds, volume != 0 & volume < 800)) + 
    geom_point(alpha = 1/50, color = '#7ea4b3') + 
    geom_smooth(method = 'lm') 

,但該行的時間比我想它。我想剪線在大約x = 600

ggplot(aes(x = volume, y = price), data = subset(diamonds, volume != 0 & volume < 800)) + 
    geom_point(alpha = 1/50, color = '#7ea4b3') + 
    geom_smooth(data = subset(diamonds, volume > 0 & volume < 600), 
       method = 'lm') 

這並修改迴歸線的公式,反正是有檢查什麼的公式將是看它是否已經改變?