2
下面的函數計算binned平均值,相對於每個bin中的觀察值數量來確定圖表上的bin點的大小,並繪製通過bin平均值的lowess線。然而,我不想通過bin的方式繪製lowess線,而是想通過原始數據集繪製直線,以便lowess線上的誤差帶表示實際數據集中的不確定性,而不是分級平均值中的不確定性。如何修改geom_smooth()
以便它將使用df
而不是dfplot
來繪製線條?ggplot黃土線從一個數據集在另一個散點圖
library(fields)
library(ggplot2)
binplot <- function(df, yvar, xvar, sub = FALSE, N = 50, size = 40, xlabel = "X", ylabel = "Y"){
if(sub != FALSE){
df <- subset(df, eval(parse(text = sub)))
}
out <- stats.bin(df[,xvar], df[,yvar], N= N)
x <- out$centers
y <- out$stats[ c("mean"),]
n <- out$stats[ c("N"),]
dfplot <- as.data.frame(cbind(x,y,n))
if(size != FALSE){
sizes <- n * (size/max(n))
}else{
sizes = 3
}
ggplot(dfplot, aes(x,y)) +
xlab(xlabel) +
ylab(ylabel) +
geom_point(shape=1, size = sizes) +
geom_smooth()
}
下面是展示功能目前是如何工作的一個重複的例子:
sampleSize <- 10000
x1 <- rnorm(n=sampleSize, mean = 0, sd = 4)
y1 <- x1 * 2 + x1^2 * .3 + rnorm(n=sampleSize, mean = 5, sd = 10)
binplot(data.frame(x1,y1), "y1", "x1", N = 25)
正如你所看到的,在LOWESS線的誤差範圍反映如果每個面的不確定性有相同數量的觀察,但他們沒有。在極端情況下,箱子的觀察數量要少得多(如點的大小所示),而低緯線的誤差帶應該反映這一點。
'?geom_smooth',第二個參數是'data'。你有沒有試過指定'data = df'? – Gregor
請使用示例輸入數據製作[可重現示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example),以便我們可以運行代碼。 – MrFlick
@Gregor在eval(expr,envir,enclos)中產生錯誤:object'x'not found'我看過了?geom_smooth和?ggplot頁面。這可能是一個完全noob的問題,似乎應該是直截了當的,但我無法弄清楚它 – Michael