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