ggplot黄土线从一个数据集上的另一个散点图

时间:2015-05-13 17:34:18

标签: r ggplot2

下面的函数计算分箱平均值,相对于每个箱中的观测数量,确定图表上的箱点大小,并绘制通过箱柜的低位线。然而,我想绘制穿过原始数据集的线,而不是通过原始数据集绘制直线,以便低位线上的误差带表示实际数据集中的不确定性,而不是平均值的不确定性。如何修改geom_smooth()以便使用df代替dfplot绘制线条?

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)

enter image description here

正如您所看到的,低位线上的误差带反映了每个箱具有相同数量的观测值的不确定性,但它们没有。极端情况下的垃圾箱的观察次数要少得多(如点的大小所示),而低位线的错误带应该反映出来。

1 个答案:

答案 0 :(得分:2)

您可以为每个图层显式设置data=参数。您还需要更改美学映射,因为原始data.frame具有不同的列名称。只需将geom_smooth来电更改为

即可
geom_smooth(data=df, aes_string(xvar, yvar)) 

使用示例数据,返回

enter image description here