【问题标题】:Quick way to add loess curve to large data set graph将黄土曲线添加到大型数据集图的快速方法
【发布时间】:2015-10-01 10:51:09
【问题描述】:

我正在尝试针对一个序列绘制一个向量 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 分钟,但仍未完成。

【问题讨论】:

  • 您在ggplot 中尝试过简单的stat_smooth(method="loess")。这需要时间,但似乎有效
  • 是的,这是我原来的方法,按照上面的代码..

标签: r plot ggplot2 runtime loess


【解决方案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()

【讨论】:

    猜你喜欢
    • 2018-03-07
    • 2021-10-16
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多