在 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,因为该图有点高。我还添加了一个<center>
标记,将其放置在已发布版本的中心。
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::knit
和 markdown::markdownToHTML
。例如:
knitr::knit('plotly-report.Rmd', 'plotly-report.md')
markdown::markdownToHTML('plotly-report.md', 'plotly-report.html')
【讨论】:
knitr
文档指出,无论图形是否为 plotly
图形,块标头中指定的图像大小以英寸为单位。你能对此发表评论吗?
如果我有诸如make_plotly()
之类的函数来运行您的p <- 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 中,如何防止非缓存块的图被单独保存?