性能问题在ggplot2上绘制多个geoms

时间:2013-06-17 13:20:43

标签: performance r plot ggplot2

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

1 个答案:

答案 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)