knitr bookdown :: gitbook и webgl: вращение не работает должным образом - PullRequest
2 голосов
/ 20 июня 2020

У меня есть следующий файл 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 файл, содержащий две идентичные интерактивные трехмерные диаграммы рассеяния. Обе диаграммы рассеяния выглядят так, как должны, но диаграмма рассеяния секунда не вращается должным образом. Он не будет правильно вращаться по горизонтали по глубине (например, вокруг вертикальной оси).

Если это поможет, вы можете найти результат HTML вязания здесь: https://www.dropbox.com/s/v3usmtes7n54t6q/Untitled.html.zip?dl=0

Я сделал все следующее, ни одно из которых не устранило проблему:

  1. Обновил все пакеты с помощью update.packages().
  2. Установил версию для разработки bookdown.
  3. Установлена ​​разрабатываемая версия knitr.
  4. Пробовали решение здесь (не сработало): интерактивные 3D-графики в файле уценки - больше не работают?

Я заметил следующее:

  • Если я изменю output на html_document, у меня не будет проблемы (я отлаживаю проблему в bookdown::gitbook, так что эти знания мне не помогают).
  • В консоли ошибок Firefox (77.0.1, 64-бит) javascript есть ошибка: TypeError: li[0] is undefined / plugin-bookdown.js:152:43 (что, похоже, имеет какое-то отношение к оглавлению и прокрутке?)

Вот результат работы sessionInfo (): * 1 042 *

> 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, поэтому он не указывает c на car::scatter3d. HTML из файла Rmd ниже использует только 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)
```

1 Ответ

3 голосов
/ 22 июня 2020

Это оказалось ошибкой в ​​rgl, который использовал устаревший метод для вычисления местоположения щелчков мыши относительно объектов в сценах. Он работал в html_document, но не с bookdown::gitbook.

В разрабатываемой версии (0.102.6) rgl это исправлено, но оно содержит некоторые действительно серьезные изменения и несколько других вещей. по-прежнему нарушаются ими: в частности, с использованием параметра фрагмента webgl=TRUE. Если вы хотите использовать разрабатываемую версию, вы должны использовать явные вызовы rglwidget() в каждом фрагменте, или если вы хотите опробовать новый материал, используйте rgl::setupKnitr(autoprint = TRUE) и просто обрабатывайте rgl графику как базовую графику, управляемую параметры чанка fig.keep et c.

Отредактировано для добавления: версия 0.102.7 исправляет известную проблему webgl=TRUE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...