给大数据集图添加黄土曲线的快速方法

Quick way to add loess curve to large data set graph

我正在尝试针对一个序列绘制一个向量 y,它有 604800 个点: x=seq(from=1, to=604800)。这不是问题,但我确实需要在图中添加一条黄土曲线。

我已经使用 ggplot2 尝试过,但这需要很长时间,而且在绘制大型数据集方面非常糟糕。见R代码:

vf <- ggplot(single.prop, aes(x,y)) + geom_line(linetype=1, size=1)
vf <- vf + stat_smooth(method="loess",fullrange=TRUE,aes(outfit=fit1<<-..y..))
vf

我现在尝试使用 base 包,但这也需要很长时间:

lw <- loess(y ~ x,data=single.prop)
plot(y ~ x, data=single.prop,pch=19,cex=0.1)
k <- order(single.prop$x)
lines(single.prop$x[k],lw$fitted[k],col="red",lwd=3)

有没有其他人对我可以做些什么来使这个 运行 更快有任何建议?我必须多次这样做,到目前为止,一个情节已经等待了大约 15 分钟,但仍然没有完成。

有了这么多的数据点,它确实可以持续很长时间来渲染绘图。当然,这取决于数据,但通常具有这么多点的图并不能给出非常可解释的图片。对于这两种可解释性,首先计算摘要统计数据然后绘制可能很有用。在您的情况下,我可以想象对 x 进行分箱并为每个分箱计算 y 的一个或多个统计数据可能很有用。我用平均值做了一个小例子,但你当然可以使用你喜欢的统计数据。希望这有帮助..

x <- 1:10^6
y <- x/10^5 + rnorm(10^6)
plot_dat <- data.frame(x, y)
p <- ggplot(plot_dat, aes(x,y)) + geom_point()


bin_plot_dat <- function(bin_size){
  nr_bins <- nrow(plot_dat) / bin_size
  x2 <- rep(1:nr_bins * bin_size, each = bin_size)
  y2 <- tapply(plot_dat$y, x2, mean)
  data.frame(x = unique(x2), y= y2)
}

plot_dat2 <- bin_plot_dat(50)
p2 <- ggplot(plot_dat2, aes(x,y)) +
  geom_point()

p2 + geom_smooth()