脚本中的ggplot图不会显示在Rstudio中

我对Rstudio有一个奇怪的问题:如果一个脚本调用ggplot2函数来显示一个图,那么使用Source来运行脚本不会产生图。 如果我用Ctrl+Aselect整个脚本,则运行当前行或selectCtrl+Enter ),然后显示graphics。 同样,在控制台中input绘图命令会产生正确的输出。

例如:

 library(ggplot2) p = ggplot(mtcars, aes(wt, mpg)) p + geom_point() 

如果粘贴到控制台,只会产生输出,而不是源。

还有其他的问题,但是都没有帮助:

  • ggplot2 ggsave函数会导致graphics设备不能显示重复的graphics,声称这个问题是在新版本中修复的,它没有。
  • RStudio – ggplot没有保存第一个打印和保存脚本中的多个图作为重复,但它不仅不是重复,但dev.off()解决方法不起作用(“ Error in dev.off() : cannot shut down device 1 (the null device) “)

当一个脚本来源时,如何让Rstudio显示graphics? 我正在使用Rstudio 0.98.1062和R 3.1.1。

解决scheme是显式调用ggplot对象上的print()

 library(ggplot2) p <- ggplot(mtcars, aes(wt, mpg)) p <- p + geom_point() print(p) 

ggplot函数返回类ggplot的对象; ggplot2的工作原理是通过重载print函数来对ggplot类的对象进行不同的操作 – 而不是将它们打印到STDOUT,它会创build图表。

在交互模式下一切正常,因为R假定大部分命令是通过print()函数运行的。 这是为了我们的方便,并允许我们inputrnorm(1)并获得任何可见的输出。 当使用运行当前select命令( Ctrl+Enter )时,RStudio的行为就好像每个选定的行都以交互模式键入并运行。 您可以通过在运行几个选定的行后在“ Console窗格中检查命令历史logging来validation。

但是,当通过source()读取文件时,这种方便的模式被放弃了。 由于这个函数的目的是运行(可能长且计算量大的)R脚本,所以不希望用低优先级的消息来污染STDOUT。 这就是为什么source()默认只会输出错误信息。 如果你想要其他的东西,你必须明确地要求。

虽然这是一个相当古老的问题。 我有同样的问题,并find一个快速的解决scheme,如果你想使用R源编辑框上的“源”button。

你可以简单地打开“回声源”(Ctrl + Shift + Enter),并按预期显示图