在 R markdown 中嵌入绘图输出

Posted

技术标签:

【中文标题】在 R markdown 中嵌入绘图输出【英文标题】:Embedding plotly output in R markdown 【发布时间】:2014-09-30 21:38:40 【问题描述】:

有一个 blog entry 描述了从 R 的 plotly API 嵌入到 R 降价。我只是使用代码为 html 文档创建 iframe

当我在 R studio 中进行预览时,没有错误消息,并且 iframe 是在 html 文档中创建的。然而,它只是空的。显然它不会以某种方式加载内容。我没有事先在 R API 中创建绘图(但这应该没关系,因为这只是将图片嵌入到 html 中)不是吗?

我目前在 r markdown 中的代码是这样的

```r
library("knitr")
library("devtools")
url<-"https://plot.ly/~etpinard/251"
plotly_iframe <- paste("<iframe scrolling='no' seamless='seamless' src='", url, 
    "/800/600' width='800' height='600'></iframe>", sep = "")

```
`r I(plotly_iframe)`

【问题讨论】:

【参考方案1】:

我们第一次发布 RPub 时遇到了同样的问题。 Here 是您在已发布 RPub 中的代码。

一旦在 RPubs.com 上发布而不是预览版,图表应该显示出来。您可以使用 RPubs 中的“在浏览器中打开”选项对其进行测试:

一个注释。我将 height 更改为 800,将 width 更改为 650,因为该图有点高。我还添加了一个&lt;center&gt; 标记,将其放置在已发布版本的中心。

Plotly 还有一个用于嵌入的目标 URL。在这种情况下,它是https://plot.ly/~etpinard/251.embed。 RPubs 似乎并不喜欢这样。你也可以试试borderwidth,看看能不能关掉边框。

就是这么说:这些图表不会显示在预览中。我认为这是浏览器的限制,因为 RStudio 还不允许发布实时 Web 内容。

如果您有兴趣并想要一些示例代码,here is the source for a blog post 嵌入了 Plotly 和 ggplot2 图。希望这可以帮助!披露:我为 Plotly 工作。

更新:2015 年 8 月 21 日

前往 Plotly 文档查看此答案的 R Markdown 版本。在 R 控制台中打印绘图对象会创建一个在线图形。例如:

p <- plot_ly(economics, x = date, y = uempmed, filename="r-docs/knitr-example")

如果您使用带有 HTML 输出的 knitr/R Markdown,打印 plotly 对象现在会将绘图作为 iframe 嵌入到 HTML 中。如果您正在使用 R Markdown 编写文档,只需打印 p 即可嵌入绘图。

您还可以使用宽度和高度代码块参数设置绘图的宽度和高度。例如:r, height=800 设置高度。

如果您使用Plotly Offline with R Studio,那么在 knitr 中打印 plotly 对象还将包括绘制图形所需的 plotly.js 文件:图形在文档内本地呈现。

要将 knitr 文档转换为独立的 HTML 文件,请使用 knitr::knitmarkdown::markdownToHTML。例如:

knitr::knit('plotly-report.Rmd', 'plotly-report.md')
markdown::markdownToHTML('plotly-report.md', 'plotly-report.html')

【讨论】:

knitr 文档指出,无论图形是否为 plotly 图形,块标头中指定的图像大小以英寸为单位。你能对此发表评论吗? 如果我有诸如make_plotly() 之类的函数来运行您的p &lt;- plot_ly(...) 命令并执行return(p),则该图将出现在RMarkdown 文档中。但是,如果我从另一个函数(例如run_workflow())中调用make_plotly(),则即使我print 它,该图也不再出现。【参考方案2】:

我必须在我的网址后添加一个“.embed?width=550&height=550”才能使其正常工作。见下文

```r
library("knitr")
library("devtools")
url<-"https://plot.ly/yourplothere.embed?width=550&height=550" 
plotly_iframe <- paste("<center><iframe scrolling='no' seamless='seamless' style='border:none' src='", url, 
    "/800/1200' width='800' height='1200'></iframe><center>", sep = "")

```
`r I(plotly_iframe)`

【讨论】:

以上是关于在 R markdown 中嵌入绘图输出的主要内容,如果未能解决你的问题,请参考以下文章

在 R-Markdown 中使用 knitr 和 kableExtra 的表格单元格中的乳胶公式或符号,

在 R markdown 中,如何防止非缓存块的图被单独保存?

markdown R绘图

如何将 Shiny 应用程序中的表格和绘图作为参数传递给 R Markdown?

在 Markdown 中嵌入 youtube 视频?

为啥这个简单的 R Shiny 输出不使用 ggplot 绘图?