RMarkdown: ¿Cómo incrustar un gráfico 3D?
¿Cómo incrustar una trama 3D (rgl) en un html creado a través de knitr?
Hay varias publicaciones antiguas que buscan un resultado similar. Sin embargo, cuando ejecuto todos los códigos de muestra que encontré. El rgl-plot no se incrusta en el html creado con knitr, sino que aparece en una ventana externa mientras se "teje" y desaparece cuando aparece la página html.
Lo que estoy buscando es una forma de integrar la trama 3D en el html resultante. No me importa si permanece interactivo o se vuelve estático.
El siguiente ejemplo está tomado del 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))
```
Respuestas
Lo que hizo debería funcionar, pero no es la mejor manera de incrustar rglgráficos en un documento.
La forma más sencilla es hacer una llamada a rglwidget()donde desea que se inserte la trama actual. También puede usar options(rgl.useNULL=TRUE)para suprimir la ventana separada que se rglcrea cuando se traza. Por ejemplo,
---
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()
```
La versión inédita 0.102.21 de rgllo hace aún más simple: rglse pueden hacer que las tramas aparezcan bajo casi las mismas reglas que las tramas de gráficos base, con solo una llamada a rgl::setupKnitr(autoprint = TRUE)al principio.
Dije que lo que intentaste debería funcionar, y lo hace para mí. ¿Por qué no para ti? Es difícil adivinar qué salió mal, pero lo más probable es que su navegador web no tenga habilitado WebGL, o que esté usando alguna versión antigua de R o rglque tenga un error. Una solución simple para un mal navegador es cambiar a un gráfico estático; podrías hacer eso con tu código cambiando hook = hook_webgla hook = hook_rgl.