脚本中的ggplot图不会显示在Rstudio中
我对Rstudio有一个奇怪的问题:如果一个脚本调用ggplot2函数来显示一个图,那么使用Source来运行脚本不会产生图。 如果我用Ctrl+A
select整个脚本,则运行当前行或select ( Ctrl+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),并按预期显示图