web-dev-qa-db-fra.com

y compris une figure 3D interactive avec knitr

En utilisant knitr, il est possible d'incorporer un rgl graphisme 3D dans un document html à partir d'un fichier source 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))
```

Mais le graphique 3D n'est pas interactif dans le document html. Est-il possible d'obtenir un graphique 3D interactif? La fonction writeWebGL() du package rgl crée un fichier html avec un graphique 3D interactif, existe-t-il un moyen d'inclure directement ce code html avec Rmarkdown? Sinon, comment inclure ce code html manuellement?

Mise à jour 24/06/2013

Voici un exemple qui ne fonctionne pas aujourd'hui (le graphique 3D n'apparaît pas dans Chrome):

  • le fichier source Rmd , qui est très basique:

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

    J'ai tricoté ce fichier avec le bouton "tricoter" de RStudio dans deux situations en utilisant différentes versions des packages rgl et knitr (mais cela est sûrement dû au package rgl car le problème se produit avec la sortie de la fonction writeWebGL):

  • anciennes versions avec R-2.15.2: fichier source et rendu html . Et le fichier html généré par writeWebGL avec rgl_0.93.928 . Pour moi ça marche bien (il n'y a que 4 points rouges dans l'intrigue 3D ... pas facile à voir sur mon écran sale mais je les vois).

  • dernières versions avec R-2.15.3: fichier source et rendu html . Et le fichier html généré par writeWebGL avec rgl_0.93.935 . Pour moi, cela ne fonctionne pas: l'intrigue 3D n'est pas visible. J'utilise Windows 7 et cela ne fonctionne pas avec Chrome, ni avec Firefox.

Modifier le 28/06/2013

Le problème soulevé par la mise à jour du 24/06 n'a rien à voir avec knitr. Je l'ai reformulé dans cet article: rendu WebGL avec le paquetage rgl 0.93.935 R

41
Stéphane Laurent

I ajouté un nouveau crochet hook_webgl() dans knitr , qui a été incorporé dans rgl plus tard. Voici un exemple:

```{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))
```
54
Yihui Xie