1

我正在尝试根据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 分钟,但仍未完成。

4

1 回答 1

1

有了这么多的数据点,它确实可以持续很长时间来渲染绘图。当然,这取决于数据,但通常有这么多点的图并不能提供非常可解释的图片。对于这两种情况的可解释性,首先计算汇总统计数据然后绘制是很有用的。在您的情况下,我可以想象对 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()
于 2015-10-01T11:22:27.777 回答