1

我正在玩一段代码,想用 ggplot2 重新绘制一个情节,但遇到了一个巨大的性能问题。也许我做错了什么,但在互联网上寻找类似的问题,并没有找到相关的话题。

使用图形包中的绘图功能并在循环中添加线条非常快。

关于如何使用 ggplot2 提高性能的任何建议,或者这就是它的工作方式?

library(bootstrap); data(stamp);
nobs <- dim(stamp)[1]
dens <- density(stamp$Thickness)

# this is using the graphics plot
plot(density(stamp$Thickness),col="black",lwd=3)
for(i in 1:100){
newThick <- rnorm(nobs,mean=stamp$Thickness,sd=dens$bw)
lines(density(newThick),col="grey",lwd=3)
}

# now try something similar using ggplot2
require(ggplot2)
g = ggplot(data.frame(Thickness = stamp[["Thickness"]]), aes(x = Thickness)) + geom_density()
for(i in 1:100){
newThick <- rnorm(nobs,mean=stamp$Thickness,sd=dens$bw)
g = g + geom_density(data = data.frame(new = newThick), aes(x = new), colour = 'gray')
}
g

它太慢了。之后尝试了 1000 个循环,我运行它的虚拟机很快就耗尽了 RAM。同样,图形中的绘图功能没有问题。

4

1 回答 1

2

这应该更快:

DF <- data.frame(Thickness = stamp[["Thickness"]],group=0)
DF <- rbind(DF,data.frame(Thickness=rnorm(nobs*100,mean=stamp$Thickness,sd=dens$bw),group=rep(1:100,each=nobs)))

g <- ggplot(DF, aes(x = Thickness,group=group)) + 
       geom_density(colour="grey") + 
       geom_density(data=DF[DF$group==0,])
print(g)
于 2013-06-17T13:35:14.837 回答