1

Just a short moment ago my question on how to embed an rgl in shiny was answered by Mike, but we seem to have stumbled into another issue,

This is the code example:

library(rgl)
library(car)
library(shiny)

cars$time <- cars$dist/cars$speed

ui <- fluidPage(
  hr("how do we get the plot inside this app window rather than in a popup?"),
  rglwidgetOutput("plot",  width = 800, height = 600)
)

server <- (function(input, output) {

  output$plot <- renderRglwidget ({
    rgl.open(useNULL=F)
    scatter3d(x=cars$speed, y=cars$dist, z=cars$time, surface=FALSE, ellipsoid = TRUE)
    rglwidget()

    })

  })   
shinyApp(ui = ui, server = server)

Changing rgl.open(useNULL=F) to rgl.open(useNULL=T) will stop the popup from showing, but in either case, the rgl in the shiny page does ZOOM, but doesn't rotate.

It seems that right mouse click registers and works, while left mouse click is not recognized....

> sessionInfo()
R version 3.3.3 (2017-03-06)
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] shiny_1.0.0 car_2.1-4   rgl_0.97.0 

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.9        knitr_1.15.1       magrittr_1.5       splines_3.3.3      MASS_7.3-45        xtable_1.8-2       lattice_0.20-34   
 [8] R6_2.2.0           minqa_1.2.4        tools_3.3.3        nnet_7.3-12        pbkrtest_0.4-7     parallel_3.3.3     grid_3.3.3        
[15] nlme_3.1-131       mgcv_1.8-17        quantreg_5.33      MatrixModels_0.4-1 htmltools_0.3.5    yaml_2.1.14        lme4_1.1-13       
[22] digest_0.6.11      Matrix_1.2-8       nloptr_1.0.4       htmlwidgets_0.8    mime_0.5           SparseM_1.77       jsonlite_1.2      
[29] httpuv_1.3.3    
Mark
  • 2,789
  • 1
  • 26
  • 66

1 Answers1

3

Your scene is using mouseMode "polar" (probably because scatter3d is setting it). That mode isn't currently implemented in the rglwidget code.

A workaround is to set the mouseMode to "trackball" before calling rglwidget(), e.g. in output$plot put this:

open3d(useNULL=TRUE)
scatter3d(x=cars$speed, y=cars$dist, z=cars$time, surface=FALSE, ellipsoid = TRUE)
par3d(mouseMode = "trackball")
rglwidget()

Note my edit: I've simplified the code above. To set the left mouse button, just specify one component of mouseMode.

Another edit: The latest version of rgl is 0.98.8, available on R-forge and maybe elsewhere eventually (see How do I install the latest version of rgl?), now has support for "polar" mouse handling. It's not identical to the behaviour in R, but it's close.

user2554330
  • 37,248
  • 4
  • 43
  • 90
  • I found another bug user2554330. Any chance I can reach you for assitance? – Mark May 26 '17 at 15:54
  • You should post bug reports to the rgl bug report page. That would be listed by `bug.report(package = "rgl")`. – user2554330 May 26 '17 at 16:58
  • I'll try. RStudio won't let me do it though and i'm not sure if it's really a bug. What I found is that for a data frame with the category column containing more than 8 factors the colors become limiting (maximum seems to be 8 by default). Turning the col into input for "groups" argument of scatter3d works fine if you run it without shiny. However, if I run it in Shiny, i get an error about the leading minor of order 1 is not positive definite in chol.default. Using the exact same data in both cases. So, seems its not possible to use scatter3d in my shiny app as is due to this. – Mark May 26 '17 at 18:38
  • `scatter3d` isn't an `rgl` function, so the `rgl` bug report page would be the wrong place to report it. – user2554330 May 26 '17 at 19:00