markdown 文件中的交互式 3D 绘图 - 不再工作?

iso*_*tzi 5 r rgl knitr r-markdown

几个月前,我想在 Markdown 文件中嵌入一个 3D 交互式绘图。查看以前的问题,我发现了这个,效果很好(顺便说一句,谢谢)。

然而,当我今天再次尝试重新做时 - 我只能用鼠标放大和缩小并且不能旋转图形。我还检查了我之前制作并用于工作的降价文件,我也遇到了同样的问题。这发生在 Rstudio“浏览器”的东西(你编织后弹出的东西)和 Chrome 中。

这里有两个例子,一个带有 rgl 包,一个带有 car 包,两者都不适合我(都曾经工作过):

1

```{r setup}
library(knitr)
library(rgl)
knit_hooks$set(webgl = hook_webgl)
```
```{r, rgl=TRUE}
x <- sort(rnorm(1000))
y <- rnorm(1000)
z <- rnorm(1000) + atan2(x,y)
plot3d(x, y, z, col=rainbow(1000))
```
Run Code Online (Sandbox Code Playgroud)

2

```{r setup}
library(knitr)
library(rgl)
knit_hooks$set(webgl = hook_webgl)
```
```{r testgl, webgl=TRUE}
library(car)
x <- sort(rnorm(1000))
y <- rnorm(1000)
z <- rnorm(1000) + atan2(x,y)
scatter3d(x, y, z , point.col = "blue", surface=FALSE, xlab = "", ylab = "C", zlab = "")
```
Run Code Online (Sandbox Code Playgroud)

我正在使用 Rstudio 0.99.489,我已经更新了所有软件包并使用 R 3.2.3

sessionInfo()
R version 3.2.3 (2015-12-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

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

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

other attached packages:
[1] car_2.1-1     rgl_0.95.1441

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.3        lattice_0.20-33    digest_0.6.9       MASS_7.3-45        grid_3.2.3         MatrixModels_0.4-1
 [7] nlme_3.1-122       SparseM_1.7        minqa_1.2.4        nloptr_1.0.4       Matrix_1.2-3       rmarkdown_0.9.2   
[13] splines_3.2.3      lme4_1.1-10        tools_3.2.3        parallel_3.2.3     pbkrtest_0.4-6     yaml_2.1.13       
[19] mgcv_1.8-9         htmltools_0.3      nnet_7.3-11        quantreg_5.19
Run Code Online (Sandbox Code Playgroud)

谢谢大家的帮助

iso*_*tzi 5

在联系了 Yihui Xie 博士(knitr开发人员)和 John Fox 教授(car开发人员)后,我认为我可以发布两个选项来解决这个问题。

:这些解决方案都是谢博士和福克斯教授所做工作的结果,我想通过这个平台感谢他们抽出时间回答我的问题。

第一个选项(不需要更新)

在调用next3d()之前立即调用以scatter3d()创建可以在 HTML 中缩放和旋转的绘图。以这个简单的代码为例:

```{r setup}
library(knitr)
library(rgl)
knit_hooks$set(webgl = hook_webgl)
```

```{r, webgl=TRUE}
library(car)
x <- sort(rnorm(1000))
y <- rnorm(1000)
z <- rnorm(1000) + atan2(x,y)
next3d()
scatter3d(x, y, z, col=rainbow(1000))
```
Run Code Online (Sandbox Code Playgroud)

第二个选项(需要包更新)

Fox 教授修改了该scatter3d()函数以next3d()自行调用(而不是rgl.clear()),从而无需next3d()在每次调用scatter3d(). 我已经在我的 Windows 机器上对其进行了测试,并且可以报告它有效。

要安装修改后的软件包,请使用:

install.packages("car", repos="http://R-Forge.R-project.org") 
Run Code Online (Sandbox Code Playgroud)


小智 2

尝试使用 Threejs

它工作没有问题,而且 IMO 看起来更好

```{r, echo=FALSE}
library(threejs)
x <- sort(rnorm(1000))
y <- rnorm(1000)
z <- rnorm(1000) + atan2(x,y)
scatterplot3js(x, y, z,  color=rainbow(1000), renderer="canvas")
```
Run Code Online (Sandbox Code Playgroud)