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


80

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

例如:

library(ggplot2)

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

仅在粘贴到控制台中时才会产生输出,而在源中则不会产生输出。

关于此还有其他问题,但都无济于事:

采购脚本时,如何使Rstudio显示图?我正在使用Rstudio 0.98.1062和R 3.1.1。

Answers:


126

解决方案是显式调用print()ggplot对象:

library(ggplot2)

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

ggplot函数返回ggplot类的对象;ggplot2通过重载print函数在ggplot类的对象上具有不同的行为-而不是将它们打印到STDOUT,而是创建图表。

一切都在交互模式下运行良好,因为R假定大多数命令都是通过print()函数运行的。这是为了我们的方便,允许我们键入rnorm(1)并获取任何可见的输出。当使用“运行当前选择命令”(Ctrl+Enter)时,RStudio的行为就像在交互模式下键入并运行每个选定行一样。您可以Console在运行少量选定的行之后通过在窗格中检查命令历史记录来验证这一点。

但是,当读取文件时,将放弃此便捷模式source()。由于此功能旨在运行(可能很长且计算量很大)R脚本,因此不希望用低优先级消息污染STDOUT。这就是为什么source()默认情况下仅输出错误消息的原因。如果您还有其他需要,则必须明确要求。


18

虽然这是一个很老的问题。如果您想在R studio编辑框上使用“源”按钮,我也遇到了同样的问题,并找到了快速解决方案。

您只需打开“带有回声的源”(Ctrl + Shift + Enter),绘图就会按预期显示


1
太好了,不知道!这很好地补充了@MirosławZalewski的解释。
Uwe

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.