RMarkdown:如何嵌入3D图?

问题描述

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

有一些较旧的帖子正在寻找类似的结果。但是,当我运行所有示例代码时,我发现了。 rgl-plot不会嵌入到用knitr创建的html中,而是在“编织”时显示在外部窗口中,并在出现html页面时消失。

我正在寻找的是一种将3D图集成到生成的html中的方法。我不在乎它是否保持交互性或变为静态。

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


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

Set up a hook to save **rgl** plots:

```{r,setup}
library(rgl)
knitr::knit_hooks$set(webgl = hook_webgl)
```

See if it works for this 3D plot after we enable the hook
via the chunk option `webgl = TRUE`:

```{r,test-rgl,webgl=TRUE}
x <- sort(rnorm(1000))
y <- rnorm(1000)
z <- rnorm(1000) + atan2(x,y)
plot3d(x,y,z,col = rainbow(1000))
```

解决方法

您所做的应该可以工作,但这不是将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()
```

rgl的未发布版本0.102.21使其更加简单:只需调用{{1},就可以使rgl图的显示与基本图形图的显示规则几乎相同。 }。

我说您尝试过的方法应该起作用,并且对我有用。为什么不适合你?很难猜测出了什么问题,但是最有可能的原因是您的网络浏览器未启用WebGL,或者您使用的是R或rgl::setupKnitr(autoprint = TRUE)的某个旧版本,其中包含错误。不良浏览器的一种简单解决方法是切换到静态图。您可以通过将rgl更改为hook = hook_webgl来使用代码。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...