Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RStudio需要很长时间才能显示ggplot图形_R_Ggplot2_Rstudio - Fatal编程技术网

RStudio需要很长时间才能显示ggplot图形

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_步骤){ …

我正在编写一个代码,它在许多时间步骤中进行长时间的计算,并逐步绘制结果

这是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_步骤){
…做大的计算

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