ggplot的qplot不会在采购时执行

Gre*_*ret 63 r ggplot2 r-faq

假设我有两个源文件,第一个命名example1.r,第二个example2.r(下面给出).

example1.r

plot(1:10,1:10)
Run Code Online (Sandbox Code Playgroud)

example2.r

qplot(1:10,1:10)
Run Code Online (Sandbox Code Playgroud)

当我获取example1.r时,绘制图形.但是,当我获取example2.r时,它不会.这里有什么解决方案?

(example2.r中的qplotggplot2的函数)

cbe*_*ica 77

更新:

  • .R文件: source选项print.eval=TRUE将导致评估结果的打印行为,如交互式命令行中所示.

source("Script.R", print.eval=TRUE)

  • .Rnw文件: knitr默认情况下模拟交互式命令行wrt的行为.printING.注意,knitr对于R包装晕影,也可以指定为Sweaving引擎.


这是我原来的答案.但请注意,这个解决方法现在恕我直言已完全过时(并且它总是对一个小的懒惰利基只有好处).

这是着名的FAQ 7.22:为什么格子/格子图形不起作用?.

对于像ggplot2或网格这样的网格图形,您需要打印图形对象才能实际绘制它.

在命令行上以交互方式自动完成.在其他地方(要获取的文件,循环,函数,Sweave块)中,您需要显式打印它.

print (qplot (1 : 10, 1 : 10))
Run Code Online (Sandbox Code Playgroud)

或者,您可以重新定义qplot以进行打印:

qplot <- function (x, y = NULL, z = NULL, ...) {
  p <- ggplot2::qplot (x = x, y = y, z = z, ...)
  print (p)
}
Run Code Online (Sandbox Code Playgroud)

(这会将轴标签更改为x和y).

我在小插图中使用这种方法,我想完全编写代码,因为交互式会话中的用户会键入它.

  • 或者在源代码中使用echo = T. (6认同)
  • @AleksandrBlekh:到目前为止,我已经使用过这种方法,但它确实奏效了.但是我越来越少地使用它,因为我几乎没有`源`.R文件,而是使用.Rnw文件.我几乎完全改为使用`knitr`而不是`Sweave`,并且`knitr`默认模仿R命令行的`print`行为,所以答案对我来说已经过时了. (2认同)
  • 原来如此.是的,如果您使用`ggplot()`而不是`qplot()`,您可以并且需要应用相同的策略. (2认同)