RStudio需要很长时间才能显示ggplot图形
我正在编写一个代码,它在许多时间步骤中进行长时间的计算,并逐步绘制结果 这是Windows7下的R3.6.1,RStudio 1.1.383 我在RStudio工作,试图用ggplot2来绘制情节。代码的总体结构如下RStudio需要很长时间才能显示ggplot图形,r,ggplot2,rstudio,R,Ggplot2,Rstudio,我正在编写一个代码,它在许多时间步骤中进行长时间的计算,并逐步绘制结果 这是Windows7下的R3.6.1,RStudio 1.1.383 我在RStudio工作,试图用ggplot2来绘制情节。代码的总体结构如下 for (step in 1:nb_steps){ ... do big calculations m<-ggplot(.... the data...) + ... some options print(m) } for(步骤1:nb_步骤){ …
for (step in 1:nb_steps){
... do big calculations
m<-ggplot(.... the data...) + ... some options
print(m)
}
for(步骤1:nb_步骤){
…做大的计算
m建议您将ggplot对象保存到grob(网格图形对象)中,然后打印grob
这样做——在我的笔记本电脑上使用示例代码——将空白时段的时间缩短一半
library(ggplot2)
library(grid)
data(mpg)
for(i in 1:10){
cat(i); cat("\n")
for (j in 1:100000){j*j} # Do something time-consuming
m<-ggplot(mpg, aes_(~ displ, ~ hwy, colour = ~trans)) +
geom_point() + ggtitle(paste("graph number",i))
grid.draw(ggplotGrob(m))
}
库(ggplot2)
图书馆(网格)
数据(mpg)
因为(我在1:10){
类别(i);类别(“\n”)
因为(1:100000中的j){j*j}#做一些耗时的事情
为完整起见,我将添加默认值,即使用基本图形。如果不需要ggplot
图形,并且图形仅用于诊断,则基本图形包可以非常快速地生成图形。当我运行MCMC时,我通常会使用基本图形进行诊断,然后使用ggplot2进行花式fina我喜欢吃东西
#base way
start <- Sys.time()
for(i in 1:10){
cat(i); cat("\n")
for (j in 1:100000){j*j} # Do something time-consuming
plot(mpg[["displ"]], mpg[["hwy"]], col = factor(mpg$trans),
main = paste("Graph Number", i))
legend("topleft", fill = factor(mpg$trans),legend = levels(factor(mpg$trans)),
ncol = 4)
}
end_time <- Sys.time()
end_time - start
#基本方式
开始是的,Sys.sleep()就可以了。另一个选择是将绘图保存到列表中,然后在空闲时查看它们?正如我所说,Sys.sleep()有帮助-它提供了更多的时间来查看图表-但并没有减少“空白”时间。列表的想法很聪明,谢谢,但目前我正在使用“live”如果我不喜欢结果,就中断代码的图形,所以…有点老套,但这似乎对我来说是个好办法。有趣的是,图形现在与循环不同步(即,循环迭代9发生时显示图形7),它们似乎在每次迭代中都会越来越落后…嗯。除了解决方案无法删除之前的图形外,它们最终会堆积在一起…在示例代码中您没有注意到这一点(因为图形有背景,而且它们都是相同的),但如果您这样做,则会变得清晰,例如m这是一个很好的观点。在绘制网格之前,移动到绘图中的新页面的方法是添加grid.newpage()。在这种情况下,您将有:{r}grid.newpage()grid.draw(ggplotGrob(m))
这对您有用吗?不幸的是,没有,grid.newpage()重新安装长空白的原始行为(哈哈!)。我不知道ggplot依赖于网格的是什么,但如果是这种情况,它可能是所有罪恶的根源,在这种情况下,将图形堆叠在彼此的顶部是唯一的方法(当然,我不会在此时导出图形,生成的文件将是噩梦!)我同意这一点,即使使用我正在使用的大图像(),默认图形也要快得多。使用它进行探索可能是一个好主意,然后转到ggplot以获得最终图形。
#base way
start <- Sys.time()
for(i in 1:10){
cat(i); cat("\n")
for (j in 1:100000){j*j} # Do something time-consuming
plot(mpg[["displ"]], mpg[["hwy"]], col = factor(mpg$trans),
main = paste("Graph Number", i))
legend("topleft", fill = factor(mpg$trans),legend = levels(factor(mpg$trans)),
ncol = 4)
}
end_time <- Sys.time()
end_time - start