knitr bookdown::gitbook 和 webgl:旋转无法正常工作

knitr bookdown::gitbook and webgl: rotation does not work properly

我有以下 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 交互式散点图的文件。两个散点图看起来都应该如此,但是 second 散点图没有正确旋转。它不会正确地水平旋转深度(例如,围绕垂直轴)。

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

我已完成以下所有操作,其中 none 已解决问题:

  1. 更新了所有包update.packages()
  2. 安装了 bookdown 的开发版本。
  3. 安装了 knitr 的开发版本。
  4. 尝试了这里的解决方案(没有用):interactive 3D plots in markdown file - not working anymore?

我注意到以下几点:

这是 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)
```

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

rgl 的开发版本 (0.102.6) 已经修复了这个问题,但它包含了一些非常重要的变化,还有一些其他的东西仍然被他们破坏了:特别是使用 webgl=TRUE 块选项。如果你想使用开发版本,你应该在每个块中使用对 rglwidget() 的显式调用,或者如果你想尝试新的东西,使用 rgl::setupKnitr(autoprint = TRUE) 并只处理 rgl 图形像基本图形,由块选项 fig.keep 等控制

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