Knitr, RGL и legend3d: legend3d не отображался в HTML-коде, сгенерированном Knitr.

Я могу создать динамическую трехмерную точечную диаграмму, используя rgl и knitr, но легенда, созданная legend3d, отсутствует. Я предполагаю, что это может быть связано с реализацией hook_webgl. Есть идеи? Спасибо.

Вот код, который я использовал для создания 3D-графика рассеяния:

```{r fig1, webgl=TRUE, fig.width=10 , fig.height = 10}
  library(knitr)
  library(rgl)
  knit_hooks$set(webgl = hook_webgl)

  x <- sort(rnorm(1000))
  y <- rnorm(1000)
  z <- rnorm(1000) + atan2(x,y)
  plot3d(x, y, z, col=rep(1:2,each=500))
  legend3d("topright",legend=c("Type 1","Type 2"), pch=16, col=1:2)
```

Информация о моем сеансе:

R version 3.1.3 (2015-03-09)
Platform: i386-w64-mingw32/i386 (32-bit)
Running under: Windows Server 2008 R2 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

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

other attached packages:
[1] knitr_1.11    rgl_0.95.1441 dplyr_0.4.3  

loaded via a namespace (and not attached):
 [1] assertthat_0.1  DBI_0.3.1       digest_0.6.8    evaluate_0.8   
 [5] formatR_1.2.1   highr_0.5.1     htmltools_0.3   lazyeval_0.1.10
 [9] magrittr_1.5    parallel_3.1.3  R6_2.1.2        Rcpp_0.12.3    
[13] rmarkdown_0.9.5 stringi_0.5-5   stringr_1.0.0   tools_3.1.3    
[17] yaml_2.1.13   

person Julian    schedule 25.02.2016    source источник


Ответы (1)


Похоже на ошибку в коде rglwidget; Я посмотрю на это.

Я рекомендую несколько изменений в вашем стиле программирования. Это не поможет с этой ошибкой, но может избавить вас от проблем позже:

  • Используйте функцию setupKnitr(), а не устанавливайте крючок самостоятельно. Ссылка на вязание скорее всего изменится, но setupKnitr() убережет от проблем.

  • Вместо того, чтобы указывать webgl=TRUE в параметрах фрагмента, вызовите функцию rglwidget::rglwidget(), когда хотите нарисовать график. Я надеюсь сделать этот вызов ненужным в будущем (больше похоже на то, что происходит с обычными графиками), но на данный момент это лучший проверенный способ сделать что-то.

  • Обновите свой R. Текущая версия — 3.2.3, скоро выйдет 3.2.4.

  • Используйте rgl и rglwidget от R-forge. Они новее, чем версии CRAN, и в них исправлено несколько ошибок. Надеюсь, скоро у них будет исправление ошибки легенды.

Добавлено позже:

Это была не столько ошибка, сколько то, что не было реализовано. Теперь это так, если вы используете rgl версии 0.95.1456 и rglwidget версии 0.1.1456, обе доступны в R-forge. Пока не так много тестов, так что в ближайшее время могут быть другие изменения.

person user2554330    schedule 26.02.2016