使用RStudio中的R Markdown在函数中生成的打印图

时间:2012-07-11 15:37:05

标签: r ggplot2 knitr rstudio

我正在尝试使用R Studio中的R-Markdown功能,我试图打印在函数内生成的图。这是我想要做的一个基本的例子。

**Test printing plots generated in a function**
================================================

``` {r  fig.width=8, fig.height=4, warning=FALSE, eval=TRUE, message=FALSE, tidy=TRUE, dev='png', echo=FALSE, fig.show='hold', fig.align='center'}
dat <- data.frame(x=c(1:10),y=c(11:20),z=c(21:30),name=rep(c("a","b"),each=5))
library(ggplot2)

ex <- function(data){

  plot(data[,1],data[,2])
  plot(data[,1],data[,3])
}

for (i in 1:10){
t1 <- rbind(i,ex(dat))
}
t1
```

测试此代码的人请确保将其保存为“.Rmd”文件,然后在RStudio工具栏中运行 knithtml()。上面的代码与我想要的那种html输出完全一致。然而,当我用基于ggplot的代码替换基本绘图功能时,我无法获得 knithtml()来生成我之前得到的10个绘图的ggplot输出。上面的基本代码现在由以下代码替换

  p1 <- ggplot(data=data, aes(x=data[,1],y=data[,2]))
  p1 <- p1+geom_point()
  p1 

我在这里错过了一些非常简单的事情。

VJ

1 个答案:

答案 0 :(得分:5)

您的代码中存在两个问题:

  1. ggplot无法识别数据x和y数据,因为它在数据环境中有效。你应该直接给它列名。
  2. yur循环中的代码没有意义。你不能将一个情节与一个指数混合......(它与基本情节一起使用的原因是通过副作用)我用简单的情节命令取而代之。
  3. 以下内容可行:

    **Test printing plots generated in a function**
    ================================================
    
    ``` {r  fig.width=8, fig.height=4, warning=FALSE, eval=TRUE, message=FALSE, tidy=TRUE, dev='png', echo=FALSE, fig.show='hold', fig.align='center'}
    dat <- data.frame(x=c(1:10),y=c(11:20),z=c(21:30),name=rep(c("a","b"),each=5))
    library(ggplot2)
    
    ex <- function(data){
      p1 <- ggplot(data=data, aes(x=x,y=y))
      p1 <- p1+geom_point()
      return(p1) 
    }
    
    for (i in 1:2){
    plot(ex(dat))
    }
    
    ```