2016-09-28 92 views
3

我想使用在浏览器上将ggplot对象显示为svg。在rmarkdown中显示ggplot对象为html svg代码

--- 
title: "" 
output: html_document 
--- 

```{r setup, include = FALSE} 
library(svglite) 
library(ggplot2) 
knitr::opts_chunk$set(
     dev = "svglite", 
     fig.ext = ".svg" 
) 
``` 

```{r, warning = F} 
data(cars) 

ggplot(mtcars, aes(mpg, qsec, color = factor(cyl))) + 
     geom_point() 

``` 

一切工作正常,但是当我在Chrome中打开它,并尝试检查元素事实证明,整个情节是内<img>标签。我想要实现的是创建 doc与整个ggplot的html代码。

我尝试使用htmlSVG函数,但它在ggplot上不起作用。我得到一个错误:

Error in FUN(X[[i]], ...) : argumemt is not a character vector 

但是,它工作得很好的基本情节 - htmlSVG(plot(data = sampled_df, z ~ price)),当我包括它。

你知道可以用ggplot对象做同样的事吗?

回答

2

我找到了解决方案。我所要做的就是使用生成整个代码的strstring,然后使用htmltools::HTML

--- 
title: "" 
output: html_document 
--- 

```{r setup, include = FALSE} 
library(svglite) 
library(ggplot2) 
knitr::opts_chunk$set(
     dev = "svglite", 
     fig.ext = ".svg" 
) 
``` 

```{r, warning = F, echo = F} 
data(cars) 

s <- svgstring() 
ggplot(mtcars, aes(mpg, qsec, color = factor(cyl))) + 
     geom_point() 

htmltools::HTML(s()) 

invisible(
     dev.off() 
) 

``` 

我使用invisible功能,以便通过dev.off()隐藏消息生成。