2016-02-25 60 views
2

我能够使用rglknitr创建动态三维散点图,但由legend3d创建的图例缺失。我想这可能与hook_webgl的执行有关。任何想法?谢谢。knitr,RGL和legend3d:legend3d没有出现在由knitr生成的html中

下面是我用来创建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) 
``` 

我的会话信息:

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 

回答

3

貌似在rglwidget代码中的错误;我会研究它。

我建议对您的编程风格进行一些更改。这些将不会与这个bug的帮助,但以后可能会节省您的问题:

  • 使用setupKnitr()功能,而不是设置knitr勾自己。链接到knitr可能会改变,但setupKnitr()将保护你免受问题。

  • 而不是在chunk选项中说webgl = TRUE,当你想绘制图时调用rglwidget :: rglwidget()函数。我希望将来可以不再需要这个通话(更像是普通情节发生的情况),但现在这是经过更好测试的方式。

  • 更新您的R.当前版本是3.2.3,很快就会有3.2.4版本。

  • 使用R-forge的rgl和rglwidget。它们比CRAN版本更新,并且有几个错误修复。希望很快他们也会有传奇错误修复。

后来补充:

这不是因为这在过去是没有实现这么多的错误。现在是,如果您使用rgl版本0.95.1456和rglwidget版本0.1.1456,均可从R-forge获得。没有太多的测试,所以下一次可能会有更多的变化。