RMarkdown:如何嵌入 3D 图?
RMarkdown: How to embed an 3D plot?
如何将 3D 图 (rgl) 嵌入到通过 knitr 创建的 html 中?
有几篇较旧的帖子正在寻找类似的结果。但是,当我 运行 找到所有示例代码时。 rgl-plot 没有嵌入到用 knitr 创建的 html 中,而是在“编织”时出现在外部 window 中,并在 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
在绘图时创建的单独 window。例如,
---
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()
```
版本 0.102.21 或更高版本的 rgl
使它变得更加简单:rgl
绘图可以按照与基本图形绘图几乎相同的规则出现,只需调用 rgl::setupKnitr(autoprint = TRUE)
开头。
我说你试过的应该有用,它对我有用。为什么不适合你?很难猜出哪里出了问题,但最有可能的可能是您的网络浏览器没有启用 WebGL,或者您使用的是一些旧版本的 R 或 rgl
,其中有一个错误。一个糟糕的浏览器的简单解决方法是切换到静态图;您可以通过将 hook = hook_webgl
更改为 hook = hook_rgl
.
来使用您的代码做到这一点
如何将 3D 图 (rgl) 嵌入到通过 knitr 创建的 html 中?
有几篇较旧的帖子正在寻找类似的结果。但是,当我 运行 找到所有示例代码时。 rgl-plot 没有嵌入到用 knitr 创建的 html 中,而是在“编织”时出现在外部 window 中,并在 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
在绘图时创建的单独 window。例如,
---
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()
```
版本 0.102.21 或更高版本的 rgl
使它变得更加简单:rgl
绘图可以按照与基本图形绘图几乎相同的规则出现,只需调用 rgl::setupKnitr(autoprint = TRUE)
开头。
我说你试过的应该有用,它对我有用。为什么不适合你?很难猜出哪里出了问题,但最有可能的可能是您的网络浏览器没有启用 WebGL,或者您使用的是一些旧版本的 R 或 rgl
,其中有一个错误。一个糟糕的浏览器的简单解决方法是切换到静态图;您可以通过将 hook = hook_webgl
更改为 hook = hook_rgl
.