将图表包装在Rmd文件中的另一个html容器中

时间:2013-03-12 19:23:42

标签: r knitr

我的情况是,出于显示目的,我需要在<div>容器中包装输出的图。

在最基本的层面上,这就是我想要做的事情:

```{r fig.width=7, fig.height=6,results='asis',echo=FALSE}
cat('<div>')
plot(cars)
cat('</div>')
```

但是,输出文档如下所示:

![plot of chunk unnamed-chunk-2](figure/unnamed-chunk-2.png)

如果需要“换行”输出,是否有解决方法?

在包装绘图时,似乎只会出现相同的行为。否则,包括已关闭的标签将按预期工作:

```{r fig.width=7, fig.height=6,results='asis',echo=FALSE}
cat('<div>')
cat('</div>')
plot(cars)
cat('<h1>Hello</h1>')
``` 

然而包装图像似乎打破了它。我也注意到<img>包含在<p>中是否可以阻止此行为?

1 个答案:

答案 0 :(得分:5)

这是一种方法。

  1. 首先,我们创建一个块挂钩来包装标签内的块输出。
  2. 我们将wrap = div作为chunk选项传递给div
  3. out.extra = ""设置为欺骗knitr以输出html以用于绘图输出。请注意,这仅适用于div代码,而不适用于span,因为在span tag.s内解析了markdown。
  4. DONE!

    以下是包含Rmd,md和html文件的gist,这里是html preview

    ## knitr Chunk Hook to Wrap
    
    ```{r setup, echo = F}
    knit_hooks$set(wrap = function(before, options, envir){
      if (before){
        paste0('<', options$wrap, '>')
      } else {
        paste0('</', options$wrap, '>')
      }
    })
    ```
    
    
    ```{r comment = NA, echo = F, wrap = 'div', out.extra=""}
    plot(mtcars$mpg, mtcars$wt)
    ```