3

我有以下 Rmd 文件:

---
output: bookdown::gitbook
---

```{r include=FALSE}
rgl::setupKnitr()
```

```{r testing1,webgl=TRUE}
with(attitude,
  car::scatter3d(x = rating, z = complaints, y = learning)
)
```

```{r testing2,webgl=TRUE}
with(attitude,
  car::scatter3d(x = rating, z = complaints, y = learning)
)
```

当我编织这个文件时,它会生成一个 HTML 文件,其中包含两个相同的 3D 交互式散点图。两个散点图看起来都应该,但第二个散点图没有正确旋转。它不会正确地水平深度旋转(例如,围绕垂直轴)。

如果有帮助,您可以在此处找到针织物的 HTML 输出:https ://www.dropbox.com/s/v3usmtes7n54t6q/Untitled.html.zip?dl=0

我已经完成了以下所有操作,但都没有解决问题:

  1. 用 . 更新了所有软件包update.packages()
  2. 安装了开发版bookdown
  3. 安装了开发版knitr
  4. 在这里尝试了解决方案(不起作用):markdown 文件中的交互式 3D 绘图 - 不再起作用了?

我注意到以下几点:

  • 如果我将其更改outputhtml_document我没有问题(我正在调试问题bookdown::gitbook,因此知识并不能直接帮助我)。
  • 在 Firefox(77.0.1,64 位)javascript 错误控制台中出现错误:(TypeError: li[0] is undefined / plugin-bookdown.js:152:43这似乎与目录和滚动有关?)

这是 sessionInfo() 的输出:

> sessionInfo()
R version 4.0.0 (2020-04-24)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Catalina 10.15.5

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib

locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8

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

loaded via a namespace (and not attached):
 [1] bookdown_0.19.4  fansi_0.4.1      digest_0.6.25    crayon_1.3.4    
 [5] assertthat_0.2.1 evaluate_0.14    rlang_0.4.6      cli_2.0.2       
 [9] rstudioapi_0.11  rmarkdown_2.3    tools_4.0.0      glue_1.4.1      
[13] xfun_0.14        yaml_2.2.1       rsconnect_0.8.16 compiler_4.0.0  
[17] htmltools_0.5.0  knitr_1.28.7  

此外,这里是一些其他相关包的版本:

> installed.packages()[c("rgl","mgcv","car"),"Version"]
       rgl       mgcv        car 
"0.100.54"   "1.8-31"    "3.0-8" 

编辑以添加更多细节

我在使用时遇到了同样的问题rgl::persp3d,所以它不是特定于car::scatter3d. 下面 Rmd 文件中的 HTML 仅使用rgl但表现出相同的行为。

---
output: bookdown::gitbook
---

```{r include=FALSE}
rgl::setupKnitr()

x <- seq(-10, 10, length = 30)
y <- x
f <- function(x, y) { r <- sqrt(x^2 + y^2); 10 * sin(r)/r }
z <- outer(x, y, f)
z[is.na(z)] <- 1
```

```{r testing1,webgl=TRUE}
rgl::persp3d(x, y, z, aspect = c(1, 1, 0.5), col = "lightblue",
        xlab = "X", ylab = "Y", zlab = "Sinc( r )", 
        polygon_offset = 1)
```

```{r testing2,webgl=TRUE}
rgl::persp3d(x, y, z, aspect = c(1, 1, 0.5), col = "lightblue",
        xlab = "X", ylab = "Y", zlab = "Sinc( r )", 
        polygon_offset = 1)
```
4

1 回答 1

4

结果证明这是 中的一个错误rgl,它使用过时的方法来计算鼠标点击相对于场景中对象的位置。它适用于html_document,但不适用于bookdown::gitbook.

的开发版本 (0.102.6)rgl已修复此问题,但它包含一些真正重大的更改,并且其他一些东西仍然被它们破坏:特别是使用webgl=TRUEchunk 选项。如果你想使用开发版本,你应该rglwidget()在每个块中使用显式调用,或者如果你想尝试新的东西,使用rgl::setupKnitr(autoprint = TRUE)rgl像基础图形一样处理图形,由块选项fig.keep等控制。

编辑添加: 版本 0.102.7 修复了已知webgl=TRUE问题。

于 2020-06-22T00:35:46.737 回答