41

使用knitr它可以将rgl3D 图形嵌入到来自Rmarkdown源文件的 html 文档中:

```{r setup}
library(rgl)
knit_hooks$set(rgl = hook_rgl)
x <- sort(rnorm(1000))
y <- rnorm(1000)
z <- rnorm(1000) + atan2(x,y)
```

```{r, rgl=TRUE}
plot3d(x, y, z, col=rainbow(1000))
```

但是 3D 图形在 html 文档中不是交互式的。是否有可能获得交互式 3D 图形?包的writeWebGL()功能是rgl创建一个带有交互式 3D 图形的 html 文件,有没有办法用 Rmarkdown 直接包含这个 html 代码?否则如何手动包含此 html 代码?

2013 年 6 月 24 日更新

这是一个今天不起作用的示例(Chrome 中没有出现 3D 图形):

  • Rmd源文件,这是非常基本的:

    ```{r setup}
    library(rgl)
    knit_hooks$set(webgl = hook_webgl)
    ```
    ```{r, webgl=TRUE}
    M <- rbind(
      c(0,0,0),
      c(-1,4,0),
      c(4,9,0),
      c(6,3,0)
      )
      points3d(M,col='red')
    ```
    ```{r}
    sessionInfo()
    ```
    

    我在两种情况下使用不同版本的rglknitr包的 RStudio“编织”按钮编织了这个文件(但这肯定是由于rgl包的原因,因为函数的输出出现了问题writeWebGL):

  • 带有 R-2.15.2 的旧版本:源文件html 渲染以及rgl_0.93.928生成的html 文件writeWebGL。对我来说效果很好(3D 图中只有 4 个红点……在我的脏屏幕上不容易看到,但我看到了)。

  • R-2.15.3 的最新版本:源文件html 渲染以及用 rgl_0.93.935生成的html 文件writeWebGL。对我来说它不起作用:3D 绘图不可见。我使用的是 Windows 7,它不适用于 Chrome,也不适用于 Firefox。

编辑 28/06/2013

24/06 更新引发的问题与knitr. 我在这篇文章中对其进行了重新表述:WebGL rendering with rgl 0.93.935 R package

4

1 回答 1

57

我在knitr中添加了一个新的钩子,后来被合并到rgl中。这是一个例子:hook_webgl()

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

```{r testgl, webgl=TRUE}
x <- sort(rnorm(1000))
y <- rnorm(1000)
z <- rnorm(1000) + atan2(x,y)
plot3d(x, y, z, col=rainbow(1000))
```
于 2013-02-15T05:36:56.547 回答