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?
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.
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
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))
```