RMarkdown:如何嵌入 3D 绘图?

ile*_*lex 3 rgl knitr r-markdown

如何将 3D 绘图(rgl)嵌入到通过 knit 创建的 html 中?

\n

有几个较旧的帖子正在寻找类似的结果。但是,当我运行我发现的所有示例代码时。rgl-plot don\xc2\xb4t 嵌入到用knitr创建的html中,但在“knitting”时出现在外部窗口中,并在html页面出现时消失。

\n

我\xc2\xb4m 寻找的是一种将 3D 绘图集成到生成的 html 中的方法。我不介意它是保持交互还是变成静态。

\n

以下示例取自 R Markdown Cookbook: https://bookdown.org/yihui/rmarkdown-cookbook/rgl-3d.html

\n
\n
title: Embed 3D plots with rgl\noutput: html_document\n---\n\nSet up a hook to save **rgl** plots:\n\n```{r, setup}\nlibrary(rgl)\nknitr::knit_hooks$set(webgl = hook_webgl)\n```\n\nSee if it works for this 3D plot after we enable the hook\nvia the chunk option `webgl = TRUE`:\n\n```{r, test-rgl, webgl=TRUE}\nx <- sort(rnorm(1000))\ny <- rnorm(1000)\nz <- rnorm(1000) + atan2(x,y)\nplot3d(x, y, z, col = rainbow(1000))\n```\n
Run Code Online (Sandbox Code Playgroud)\n

use*_*330 6

您所做的应该可行,但这不是rgl在文档中嵌入图形的最佳方式。

最简单的方法是调用rglwidget()您想要插入当前绘图的位置。您还可以用来抑制绘图时创建的options(rgl.useNULL=TRUE)单独窗口。rgl例如,

---
title: Embed 3D plots with rgl
output: html_document
---

No need for a hook with `rgl` version >= 0.96.0, just call `rglwidget()`.

```{r, setup}
options(rgl.useNULL = TRUE) # Suppress the separate window.
library(rgl)
```

See it work for this 3D plot without the hook:

```{r}
x <- sort(rnorm(1000))
y <- rnorm(1000)
z <- rnorm(1000) + atan2(x,y)
plot3d(x, y, z, col = rainbow(1000))
rglwidget()
```
Run Code Online (Sandbox Code Playgroud)

版本 0.102.21 或更新版本rgl使其变得更加简单: 可以使绘图在与基本图形绘图几乎相同的规则下显示,只需在开始时rgl调用即可。rgl::setupKnitr(autoprint = TRUE)

我说你尝试过的应该有效,而且对我也有效。为什么不适合你呢?很难猜测出了什么问题,但最有可能的情况是您的 Web 浏览器没有启用 WebGL,或者您正在使用某些旧版本的 R 或rgl其中存在错误。针对不良浏览器的一种简单解决方法是切换到静态绘图;您可以通过将代码更改为 来做到这hook = hook_webgl一点hook = hook_rgl