Подтвердить что ты не робот

Включая интерактивную трехмерную фигуру с knitr

Используя knitr, можно вставить 3D-графику rgl в html-документ из исходного файла Rmarkdown:

```{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))
```

Но трехмерная графика не является интерактивной в html-документе. Можно ли получить интерактивную 3D-графику? Функция writeWebGL() пакета rgl создает html файл с интерактивной 3D-графикой, есть ли способ напрямую связать этот HTML-код с Rmarkdown? В противном случае, как включить этот html-код вручную?

Обновление 24/06/2013

Вот пример, который сегодня не работает (3D-графика не отображается в Chrome):

  • исходный файл 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()
    ```
    

    Я связал этот файл с кнопкой RStudio "knit" в двух ситуациях, используя разные версии пакетов rgl и knitr (но это, безусловно, связано с пакетом rgl, потому что проблема возникает с выходом функция writeWebGL):

  • старые версии с R-2.15.2: исходный файл и рендеринг html. И html файл, сгенерированный writeWebGL с rgl_0.93.928. Для меня это работает хорошо (на 3D-графике всего 4 красных точки... нелегко увидеть на моем грязном экране, но я их вижу).

  • последние версии с R-2.15.3: исходный файл и рендеринг html. И html файл, сгенерированный writeWebGL с rgl_0.93.935. Для меня это не работает: 3D-график не виден. Я использую Windows 7, и он не работает с Chrome, ни с Firefox.

Изменить 28/06/2013

Проблема, связанная с обновлением 24/06, не имеет ничего общего с knitr. Я перефразировал его в этом сообщении: рендеринг WebGL с пакетом rgl 0.93.935 R

4b9b3361

Ответ 1

Я добавил новый крючок hook_webgl() в knitr, который был включен в rgl позже. Вот пример:

'''{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))
'''