iso*_*tzi 5 r rgl knitr r-markdown
几个月前,我想在 Markdown 文件中嵌入一个 3D 交互式绘图。查看以前的问题,我发现了这个,效果很好(顺便说一句,谢谢)。
然而,当我今天再次尝试重新做时 - 我只能用鼠标放大和缩小并且不能旋转图形。我还检查了我之前制作并用于工作的降价文件,我也遇到了同样的问题。这发生在 Rstudio“浏览器”的东西(你编织后弹出的东西)和 Chrome 中。
这里有两个例子,一个带有 rgl 包,一个带有 car 包,两者都不适合我(都曾经工作过):
```{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)
```{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)
谢谢大家的帮助
在联系了 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)
| 归档时间: |
|
| 查看次数: |
1685 次 |
| 最近记录: |