2016-02-25 1 views
2

Je suis capable de créer un diagramme de dispersion 3D dynamique en utilisant rgl et knitr, mais la légende créée par le legend3d est manquante. Je suppose que cela peut être lié à la mise en œuvre de hook_webgl. Une idée? Je vous remercie.knitr, RGL et legend3d: legend3d ne s'affiche pas dans le fichier html généré par knitr

Voici le code que j'utilisé pour créer le nuage de points 3D:

```{r fig1, webgl=TRUE, fig.width=10 , fig.height = 10} 
    library(knitr) 
    library(rgl) 
    knit_hooks$set(webgl = hook_webgl) 

    x <- sort(rnorm(1000)) 
    y <- rnorm(1000) 
    z <- rnorm(1000) + atan2(x,y) 
    plot3d(x, y, z, col=rep(1:2,each=500)) 
    legend3d("topright",legend=c("Type 1","Type 2"), pch=16, col=1:2) 
``` 

Mes infos de session:

R version 3.1.3 (2015-03-09) 
Platform: i386-w64-mingw32/i386 (32-bit) 
Running under: Windows Server 2008 R2 x64 (build 7601) Service Pack 1 

locale: 
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252 
[3] LC_MONETARY=English_United States.1252 
[4] LC_NUMERIC=C       
[5] LC_TIME=English_United States.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods 
[7] base  

other attached packages: 
[1] knitr_1.11 rgl_0.95.1441 dplyr_0.4.3 

loaded via a namespace (and not attached): 
[1] assertthat_0.1 DBI_0.3.1  digest_0.6.8 evaluate_0.8 
[5] formatR_1.2.1 highr_0.5.1  htmltools_0.3 lazyeval_0.1.10 
[9] magrittr_1.5 parallel_3.1.3 R6_2.1.2  Rcpp_0.12.3  
[13] rmarkdown_0.9.5 stringi_0.5-5 stringr_1.0.0 tools_3.1.3  
[17] yaml_2.1.13 

Répondre

3

On dirait un bug dans le code rglwidget; Je vais regarder dedans.

Je recommande quelques modifications à votre style de programmation. Ils ne seront pas aider à ce bug, mais peut vous faire économiser des problèmes plus tard:

  • Utilisez la fonction setupKnitr() plutôt que de mettre le crochet knitr vous. Le lien vers knitr est susceptible de changer, mais setupKnitr() vous protégera des problèmes. Plutôt que de dire webgl = TRUE dans les options du bloc, appelez la fonction rglwidget :: rglwidget() lorsque vous voulez dessiner le tracé. J'espère rendre cet appel inutile à l'avenir (plutôt comme ce qui se passe avec les parcelles habituelles), mais pour l'instant c'est la façon la mieux testée de faire les choses.

  • Mettez à jour votre R. La version actuelle est 3.2.3, avec 3.2.4 bientôt.

  • Utilisez les paramètres rgl et rglwidget de R-forge. Ils sont plus récents que les versions CRAN, et ont plusieurs corrections de bugs. J'espère qu'ils auront bientôt le problème de la légende.

ajouté plus tard:

Ce ne fut pas tant un bug comme quelque chose qui n'a pas été mis en œuvre. Maintenant, il est, si vous utilisez rgl version 0.95.1456 et rglwidget version 0.1.1456, les deux disponibles auprès de R-forge. Il n'y a pas encore beaucoup de tests, donc il y aura peut-être plus de changements au cours du prochain.