降价文件中的交互式3D图 - 不再工作了?

时间:2016-02-03 10:24:08

标签: r knitr r-markdown rgl

几个月前,我想在一个降价文件中嵌入一个3D互动情节。 看看以前的问题,我发现this,效果很好(感谢BTW)。

然而,当我今天再试一次 - 我只能用鼠标放大和缩小,不能旋转图形。我还检查了我之前制作并用于工作的降价文件,我也遇到了同样的问题。这种情况发生在Rstudio"浏览器" thingy(你编织后弹出的东西)以及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))
```

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 = "")
```

我使用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

谢谢大家的帮助

3 个答案:

答案 0 :(得分:3)

在联系谢毅辉博士(knitr开发人员)和John Fox教授(car开发人员)之后,我认为我可以发布两个方案来解决这个问题。

注意:这些解决方案都是谢博士和Fox教授所做的工作的结果,我想用这个平台感谢他们抽出时间回答我的问题。< / p>

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

在调用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))
```

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

Fox教授修改了scatter3d()函数以自行调用next3d()(而不是rgl.clear()),因此无需在每次调用{next3d()之前手动调用scatter3d() {1}}。我已经在我的Windows机器上测试了它,并且可以报告它有效。

要安装修改后的包使用:

install.packages("car", repos="http://R-Forge.R-project.org") 

答案 1 :(得分: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")
```

答案 2 :(得分:1)

首先尝试安装rglwidget包install.packages('rglwidget')

接下来,在代码块之间添加空格

时,示例1似乎有效
```{r setup}
library(knitr)
library(rgl)
knit_hooks$set(webgl = hook_webgl)
```

```{r, webgl=TRUE}
x <- sort(rnorm(1000))
y <- rnorm(1000)
z <- rnorm(1000) + atan2(x,y)
plot3d(x, y, z, col=rainbow(1000))
```

我不确定为什么示例二不再工作