我正在使用一段代码,并希望使用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个循环,我正在运行的虚拟机运行速度非常快。再次,图形的绘图功能没有问题。
答案 0 :(得分: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)