9

我试图在 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 

我在这里错过了一些非常简单的东西吗?

主播

4

1 回答 1

6

您的代码中有两个问题:

  1. ggplot 无法识别数据 x 和 y 数据,因为它在数据环境中工作。您应该直接给它列名。
  2. 你循环中的代码没有意义。您不能将绘图与索引混合...(它与基本绘图一起使用的原因是通过副作用)我已将其替换为简单的绘图命令。

以下将起作用:

**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))
}

```
于 2012-07-11T16:58:17.777 回答