将黄土曲线添加到大型数据集图表的快速方法

时间:2015-10-01 10:51:09

标签: r plot ggplot2 runtime loess

我正在尝试针对序列绘制一个具有604800个点的向量yx=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分钟的一个情节,但仍然没有完成。

1 个答案:

答案 0 :(得分:0)

有了这么多数据点,它可以确实持续很长时间来渲染图。当然,这取决于数据,但通常情况下,这一点很多,并没有给出可解释的图片。对于这两个时间的可解释性,首先计算汇总统计数据然后绘制图表是有用的。在你的情况下,我可以想象在x上进行分箱并为每个bin计算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()